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

发布于 2025-01-06 05:39:36 字数 217 浏览 0 评论 0 原文

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

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

我做错了什么?

I'm trying to grab the date from my database in a standard timestamp and display it as ISO 8601. I'm unable to easily do it in PHP so I'm trying to do it in my SELECT statement. This is what I have, but it displays an error:

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

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

想念有你 2025-01-13 05:39:36

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

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

The DATE_FORMAT(DateColumn) has to be in the SELECT list:

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name 
ORDER BY id DESC 
太阳公公是暖光 2025-01-13 05:39:36

这对我有用

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

This worked for me

DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00')  ,'%Y-%m-%dT%TZ')
迟到的我 2025-01-13 05:39:36

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

DATE_FORMAT only works on MySQL date columns, not timestamps.

A UNIX timestamp is an integer containing the number of seconds since Jan 1, 1970 UTC. To format this as an ISO 8601 date you need to use the FROM_UNIXTIME() function instead.

FROM_UNIXTIME takes the same format strings as DATE_FORMAT, so to format a column named 'created' you'd:

SELECT created /* e.g. 1288799488 */ , 
       FROM_UNIXTIME(created,'%Y-%m-%dT%TZ') /* e.g. 2010-11-03T08:51:28Z */
FROM table_name
傻比既视感 2025-01-13 05:39:36

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

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

Loading the date field from the database and converting it to ISO format with PHP is straight-forward; see the c format string to PHP date: http://www.php.net/manual/en/function.date.php

echo date('c'); // expected "2013-03-08T14:45:37+05:00"
另类 2025-01-13 05:39:36

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

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

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

Why is it hard to do it in PHP?

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

Anyway, that DATE_FORMAT needs to be in the fields to select, not tacked on to the end.

旧话新听 2025-01-13 05:39:36

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

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

DATE_FORMAT(date, '%Y-%m-%dT%TZ') should be in select clause.

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') 
FROM table_name 
ORDER BY id DESC 
無心 2025-01-13 05:39:36

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

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

You should move the DATE_FORMAT to the select part of your query like this:

SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
路弥 2025-01-13 05:39:36

另一种格式化支持任何时区的 DateTime 的解决方案:

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

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

Another solution to format the DateTime supporting any timezone:

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

It will add the timezone information of the date.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文