Каков рекомендуемый способ хранения текущего времени с использованием 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).