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

问题描述 投票:0回答:9

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

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

我做错了什么?

mysql database date-format iso8601
9个回答
113
投票

DATE_FORMAT(DateColumn)
必须位于
SELECT
列表中:

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

16
投票

这对我有用

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

9
投票

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

UNIX 时间戳是一个整数,包含自 UTC 1970 年 1 月 1 日以来的秒数。要将其格式化为 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

6
投票

从数据库加载日期字段并使用 PHP 将其转换为 ISO 格式非常简单;请参阅 PHP 的

c
格式字符串
date
http://www.php.net/manual/en/function.date.php

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

4
投票

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

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

无论如何,

DATE_FORMAT
需要位于要选择的字段中,而不是附加到最后。


4
投票

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

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

3
投票

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

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

1
投票

格式化日期时间的另一种解决方案支持任何

timezone

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

它将添加日期的时区信息。


0
投票

当服务器不是 UTC 时,所选答案会报告错误时间。为了避免时区问题并始终使用 UTC,请尝试以下操作:

SELECT CONCAT(UTC_DATE(),'T',UTC_TIME(),'Z');
© www.soinside.com 2019 - 2024. All rights reserved.