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

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

$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);

Я столкнулся с следующими подходами:

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

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

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

Ответ 1

Рекомендуется использовать тип поля mysql timestamp (YYYY-MM-DD HH: MM: SS) для хранения переменных времени и даты в 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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Формат, используемый 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).