将MySQL SELECT中的日期格式设置为ISO 8601

drkbr07n  于 2022-11-28  发布在  Mysql
关注(0)|答案(8)|浏览(193)

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

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

我做错了什么?

i34xakig

i34xakig1#

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

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

e5njpo682#

这对我很有效

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

omvjsjqw3#

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
9lowa7mx

9lowa7mx4#

从数据库加载日期字段并使用PHP将其转换为ISO格式是非常简单的;将c字符串转换为PHPx 1 m1n1x:http://www.php.net/manual/en/function.date.php

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

xbp102n05#

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

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

无论如何,DATE_FORMAT需要在字段中选择,而不是附加到末尾。

4jb9z9bj

4jb9z9bj6#

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

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

vsmadaxz7#

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

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

7kjnsjlb8#

另一种支持任何timezone的DateTime解决方案:

SELECT CONCAT(DATE_FORMAT( `date` ,'%Y-%m-%dT%T'), TIME_FORMAT( TIMEDIFF(NOW(), UTC_TIMESTAMP), '+%H:%i') ) AS date_formatted;

添加日期的时区信息。

相关问题