Каков рекомендуемый способ хранения текущего времени с использованием PHP и MySQL? - PullRequest
11 голосов
/ 24 февраля 2010

Мой первоначальный подход был:

$current = time(); // save this to column CURRENT_TIME with column type VARCHAR

//retrieve it like this
$retrieved = mysql_query(....) //assume query for getting the stored time value
$time = strtotime($retrieved);

Я встречал следующие подходы:

  1. используйте gmstrftime для обработки gmt
  2. используйте INT вместо VARCHAR для столбца
  3. используйте функцию mysql CURTIME или CURDATE
  4. использовать функцию UNIX_TIMESTAMP mysql

ни один из которых не использовал DATETIME или TIMESTAMP mysql var type.

У вас есть лучший подход к этому?

Ответы [ 5 ]

19 голосов
/ 24 февраля 2010

Рекомендуется использовать тип поля mysql timestamp (ГГГГ-ММ-ДД ЧЧ: ММ: СС) для хранения переменных времени и даты в mysql .

$sDate = date("Y-m-d H:i:s"); // 2015-04-07 07:12:51
mysql_query("insert into `table_name` set `created_on` = '$sDate'");

Это дает вам возможность использовать функции mysql для сравнения дат, вычисления разницы во времени и т. Д. Непосредственно в вашем запросе mysql.

Также вы всегда можете получить метку времени с помощью функции strtotime () .

$result = mysql_query("select `created_on` from `table_name`");
$row = mysql_fetch_row($result);
$iTimestamp = strtotime($row[0]); // 1428390771
3 голосов
/ 24 февраля 2010

Я просто использую тип значения TIMESTAMP в MySQL и позволяю MySQL использовать свой собственный CURRENT_TIMESTAMP.

1 голос
/ 24 февраля 2010

Ну, вы можете превратить поле MySQL TIMESTAMP в значение PHP Time (), используя strtotime()

Тогда вам просто нужно сделать функцию, которая правильно превращает значение PHP Time () в значение MySQL TIMESTAMP.

0 голосов
/ 24 февраля 2010

Формат, используемый MySQL, не должен совпадать с форматом, используемым PHP. Выберите лучшее с обеих сторон. Базы данных имеют типы данных даты по причине; в MySQL вы можете выбрать один из них:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html

В PHP у вас есть три основных варианта:

  • Старые добрые временные метки просты в обращении, и вы можете использовать их в своих запросах MySQL - смотрите FROM_UNIXTIME () и UNIX_TIMESTAMP () - но у них есть серьезные проблемы с диапазоном (вы не можете полагаться на них до даты 1970 года, поэтому они не подходят для дней рождения).

  • DateTime объекты являются мощными и встроенными, не имеют проблем с диапазоном и поддерживают часовые пояса. Однако их иногда не очень удобно использовать, так как им, похоже, не хватает некоторых важных методов.

  • Вы можете использовать пользовательский объект даты (сторонний или собственный на основе DateTime).

0 голосов
/ 24 февраля 2010

Хранить его как int более логично. Вы сохраняете формат строки даты, используя которую вы можете позже извлечь другой формат и больше данных. Я также сохраняю его как int.

Редактировать: Для приложения (Uni-TimeZone) int - это самый быстрый способ, а в PHP есть отличные инструменты для преобразования времени.

...