64

我正在尝试以标准时间戳从我的数据库中获取日期并将其显示为 ISO 8601。我无法在 PHP 中轻松执行此操作,因此我尝试在我的 SELECT 语句中执行此操作。这就是我所拥有的,但它显示一个错误:

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

我究竟做错了什么?

4

7 回答 7

108

DATE_FORMAT(DateColumn)必须在列表SELECT中:

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name 
ORDER BY id DESC 
于 2012-02-17T01:48:36.607 回答
10

这对我有用

DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00')  ,'%Y-%m-%dT%TZ')
于 2016-03-08T22:30:32.100 回答
8

DATE_FORMAT 仅适用于 MySQL 日期列,不适用于时间戳。

UNIX 时间戳是一个整数,包含自 1970 年 1 月 1 日 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
于 2013-05-04T20:18:21.890 回答
6

从数据库中加载日期字段并使用 PHP 将其转换为 ISO 格式非常简单;查看cPHP 的格式字符串datehttp ://www.php.net/manual/en/function.date.php

echo date('c'); // expected "2013-03-08T14:45:37+05:00"
于 2013-03-08T19:46:01.390 回答
4

为什么在 PHP 中很难做到这一点?

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

无论如何,这DATE_FORMAT需要在字段中进行选择,而不是添加到最后。

于 2012-02-17T01:50:47.383 回答
4

DATE_FORMAT(date, '%Y-%m-%dT%TZ') 应该在select子句中。

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') 
FROM table_name 
ORDER BY id DESC 
于 2012-02-17T01:53:39.373 回答
3

您应该将 DATE_FORMAT 移动到查询的选择部分,如下所示:

SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
于 2012-02-17T01:49:51.047 回答