MySQL SELECT中的格式化日期为ISO 8601

Ada*_*dam 44 mysql database iso8601 date-format

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

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

我究竟做错了什么?

ype*_*eᵀᴹ 73

DATE_FORMAT(DateColumn)必须在SELECT列表:

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

  • @MladenJanjetovićZ不是一个参数(否则它将以%开头),它只是ISO 8601用来指定时区为UTC的约定.因此,如果将日期时间存储在不同的时区,请先将其转换为UTC,然后使用此格式字符串.最好在UTC时区发送ISO 8601日期,而不是在您自己的服务器时区发送. (6认同)
  • @David那是因为这个函数假设DateTime是UTC. (5认同)
  • 在像西班牙这样的某些区域中,这不起作用.在时间+01:00之后,它们需要时间差而不是Z. 在PHP中这很好用:date("c",strtotime($ comment ['datetime'])), (4认同)
  • 不完全是所问的问题,但谷歌把我带到了这里:要获取以毫秒为单位的 ISO 字符串格式,我必须使用 `DATE_FORMAT(date, '%Y-%m-%dT%T.000Z')` (3认同)

Pro*_*ken 6

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
Run Code Online (Sandbox Code Playgroud)


ofu*_*mbi 6

这对我有用

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


AL *_*e X 5

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

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

  • 这是 PHP 函数,而不是 MySQL 函数。 (2认同)