Формат даты в MySQL SELECT как ISO 8601 - PullRequest
41 голосов
/ 17 февраля 2012

Я пытаюсь получить дату из моей базы данных в стандартной метке времени и отобразить ее как ISO 8601. Я не могу легко сделать это в PHP, поэтому я пытаюсь сделать это в своем операторе SELECT. Это то, что у меня есть, но выдает ошибку:

SELECT * FROM table_name ORDER BY id DESC DATE_FORMAT(date,"%Y-%m-%dT%TZ")

Что я делаю не так?

Ответы [ 7 ]

67 голосов
/ 17 февраля 2012

DATE_FORMAT(DateColumn) должен быть в списке SELECT:

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name 
ORDER BY id DESC 
6 голосов
/ 09 марта 2016

Это сработало для меня

DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00')  ,'%Y-%m-%dT%TZ')
6 голосов
/ 05 мая 2013

DATE_FORMAT работает только со столбцами даты MySQL, но не с метками времени.

Метка времени UNIX - это целое число, содержащее количество секунд с 1 января 1970 года UTC.Чтобы отформатировать это как дату ISO 8601, вам нужно вместо этого использовать функцию FROM_UNIXTIME ().

FROM_UNIXTIME принимает те же строки формата, что и DATE_FORMAT, поэтому для форматирования столбца с именем 'create' вы должны:

SELECT created /* e.g. 1288799488 */ , 
       FROM_UNIXTIME(created,'%Y-%m-%dT%TZ') /* e.g. 2010-11-03T08:51:28Z */
FROM table_name
5 голосов
/ 17 февраля 2012

Почему это трудно сделать в PHP?

date("Y-m-d\TH:i:sO",strtotime($sqldata['time']));

В любом случае, DATE_FORMAT должно быть в полях для выбора, а не привязано к концу.

3 голосов
/ 08 марта 2013

Загрузка поля даты из базы данных и преобразование его в формат ISO с помощью PHP является простым; см. строку формата c в PHP date: http://www.php.net/manual/en/function.date.php

echo date('c'); // expected "2013-03-08T14:45:37+05:00"
3 голосов
/ 17 февраля 2012

Вы должны переместить DATE_FORMAT в выбранную часть вашего запроса следующим образом:

SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
2 голосов
/ 17 февраля 2012

DATE_FORMAT(date, '%Y-%m-%dT%TZ') должно быть в select предложении.

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') 
FROM table_name 
ORDER BY id DESC 
...