Получение даты из MySQL в PHP
Как известно, в MySQL есть два основных типа данных для хранения дат: date и datetime. Второй вариант, по сути, является расширенным вариантом первого и позволяет помимо даты хранить и время. При извлечении из MySQL данных такого типа мы получаем строки соответственно следующих форматов:
2012-03-03 2012-03-03 12:00:00
Однако в PHP в большинстве функциях работы с датами используется так называемый формат даты Unix timestamp, представляющий из себя число — количество секунд между "эпохой Юникс" (полночью первого января 1970 года) и текущим временем.
Можно при помощи парсинга получить из вышеупомянутых строк значения года, месяца и т.д. и передать их в PHP-функцию mktime, но я предлагаю вариант проще. Существует MySQL-функция Unix_timestamp, которая позволяет преобразовать дату из формата MySQL в формат Unix timestamp на этапе запроса. Используется следующим образом:
SELECT created AS created_mysql, Unix_timestamp(created) AS created_unix FROM articles;
Поле created имеет тип datetime. После выполнения такого запроса мы получим значения поля created в двух форматах — в формате MySQL (created_mysql) и в формате Unix timestamp (created_unix). Второй вариант можно сразу использовать непосредственно в PHP-функциях работы с датами, например:
echo date('d.m.Y', $row['created_unix']);
или даже в функции формирования русской даты:
echo rusdate($row['created_unix'], '%DAYWEEK%, j %MONTH% Y, G:i');
Я представлял себе, что-то типа:
1. В базе данных полю с датой и временем даём тип TIMESTAMP.
2. Из того, что там получается выделяем регулятивным выражением все данные.
3. Выводим по шаблону, как в функции формирования русской даты.
Ну как вы и сказали...
А я раньше хранил дату и время в разных полях в таблице)))
В самой базе данных даты удобно хранить в форматах date и datetime, так как по ним легко делать гибкую выборку: публикации за определенный период времени и тому подобные.
Да, вы правы... Об этом я и не подумал.
Использовать регулярные выражения нужно в оправданных случаях, этот случай не тот.
А как из php записать дату и время в поле типа DATETIME?
Вот как сделал я:
SquiD, нормальное решение. Единственное, если нужно записывать текущую дату и время, можно воспользоваться MySQL-функцией Now().