Ответ 1
DATE_FORMAT(DateColumn)
должен находиться в списке SELECT
:
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name
ORDER BY id DESC
Я пытаюсь взять дату из своей базы данных в стандартную метку времени и отобразить ее как ISO 8601. Я не могу легко сделать это в PHP, поэтому я пытаюсь сделать это в инструкции SELECT. Это то, что у меня есть, но оно отображает ошибку:
SELECT * FROM table_name ORDER BY id DESC DATE_FORMAT(date,"%Y-%m-%dT%TZ")
Что я делаю неправильно?
DATE_FORMAT(DateColumn)
должен находиться в списке SELECT
:
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name
ORDER BY id DESC
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')
Почему это трудно сделать в PHP?
date("Y-m-d\TH:i:sO",strtotime($sqldata['time']));
Во всяком случае, DATE_FORMAT
должен быть в полях, чтобы выбирать, а не прикреплять их до конца.
Вы должны переместить DATE_FORMAT в часть выбора вашего запроса следующим образом:
SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
Загрузить поле даты из базы данных и преобразовать его в формат 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"
DATE_FORMAT(date, '%Y-%m-%dT%TZ')
должен находиться в select
.
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ')
FROM table_name
ORDER BY id DESC