我试图从我的数据库中获取一个标准时间戳并将其显示为ISO 8601格式。因为我无法轻松地在PHP中实现它,所以我尝试在SELECT语句中实现。这是我拥有的内容,但它显示了一个错误:
SELECT * FROM table_name ORDER BY id DESC DATE_FORMAT(date,"%Y-%m-%dT%TZ")
我做错了什么?
我试图从我的数据库中获取一个标准时间戳并将其显示为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( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00') ,'%Y-%m-%dT%TZ')
date
字段的时间。 - undefinedDATE_FORMAT只能用在MySQL的date列上,而不能用于timestamp。
UNIX timestamp是一个整数,包含自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
从数据库加载日期字段并使用PHP将其转换为ISO格式非常简单;请参见PHP date
的c
格式字符串: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
date("Y-m-d\TH:i:sO",strtotime($sqldata['time']));
无论如何,需要在选择的字段中输入 DATE_FORMAT
,而不是添加到末尾。
date("c", strtotime($sqldata['time']));
的意思是使用 PHP 中的 date 函数,将 $sqldata['time']
转换为 ISO 8601 格式的日期和时间字符串。 - chaimSELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
另一种支持任何时区
的DateTime格式化解决方案:
SELECT CONCAT(DATE_FORMAT( `date` ,'%Y-%m-%dT%T'), TIME_FORMAT( TIMEDIFF(NOW(), UTC_TIMESTAMP), '+%H:%i') ) AS date_formatted;
它将添加日期的时区信息。
DATE_FORMAT(date, '%Y-%m-%dT%T.000Z')
。 - Aymeric Bouzy aybbyk