Получение даты из 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');

Комментарии

Оставить комментарий »

 
Дмитрий
2 апреля 2012, 15:45
#1
 

Я представлял себе, что-то типа:
1. В базе данных полю с датой и временем даём тип TIMESTAMP.
2. Из того, что там получается выделяем регулятивным выражением все данные.
3. Выводим по шаблону, как в функции формирования русской даты.
Ну как вы и сказали...
А я раньше хранил дату и время в разных полях в таблице)))

Joker-jar
2 апреля 2012, 16:11
#2
 

В самой базе данных даты удобно хранить в форматах date и datetime, так как по ним легко делать гибкую выборку: публикации за определенный период времени и тому подобные.

Дмитрий
2 апреля 2012, 16:39
#3
 

Да, вы правы... Об этом я и не подумал.

Евгений
4 апреля 2012, 14:59
#4
 

2. Из того, что там получается выделяем регулятивным выражением все данные.

Использовать регулярные выражения нужно в оправданных случаях, этот случай не тот.

SquiD
17 марта 2013, 20:17
#5
 

А как из php записать дату и время в поле типа DATETIME?

Вот как сделал я:

$columns_diary = array('id', 'record', 'date'); // массив имен полей
		$values_diary = array(0, $_POST['new_record'], date('Y-m-d H:i:s', time())); // массив значений полей
		$mysql->insert_into($columns_diary, $values_diary); // добавляем данные в базу данных
Joker-jar
17 марта 2013, 20:30
#6
 

SquiD, нормальное решение. Единственное, если нужно записывать текущую дату и время, можно воспользоваться MySQL-функцией Now().

Оставить комментарий

Ваше имя
 
Ваш e-mail
 
Комментарий