Формат даты в MySQL выберите как ISO 8601

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

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

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

7 ответов


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

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

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

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

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


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

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

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

SELECT created /* e.g. 1288799488 */ , 
       FROM_UNIXTIME(created,'%Y-%m-%dT%TZ') /* e.g. 2010-11-03T08:51:28Z */
FROM table_name

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

DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00')  ,'%Y-%m-%dT%TZ')

см. также c строка формат даты: http://www.php.net/manual/en/function.date.php

echo date('c'); // expected "2013-03-08T14:45:37+05:00"

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

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

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

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