如何使用 PHP 将日期显示为 iso 8601 格式
我正在尝试使用 PHP 将 MySQL 数据库中的日期时间显示为 iso 8601 格式的字符串,但结果是错误的。
2008 年 10 月 17 日的结果为: 1969-12-31T18:33:28-06:00 这显然不正确(年份应该是 2008 年而不是 1969 年)
这是我正在使用的代码:
<?= date("c", $post[3]) ?>
$post[ 3] 是我的 MySQL 数据库中的日期时间 (CURRENT_TIMESTAMP)
。
有什么想法出了什么问题吗?
I'm trying to display a datetime from my MySQL database as an iso 8601 formated string with PHP but it's coming out wrong.
17 Oct 2008 is coming out as: 1969-12-31T18:33:28-06:00 which is clearly not correct (the year should be 2008 not 1969)
This is the code I'm using:
<?= date("c", $post[3]) ?>
$post[3] is the datetime (CURRENT_TIMESTAMP)
from my MySQL database.
Any ideas what's going wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
date
的第二个参数是 UNIX 时间戳,而不是数据库时间戳字符串。您需要使用 strtotime 转换数据库时间戳。
The second argument of
date
is a UNIX timestamp, not a database timestamp string.You need to convert your database timestamp with strtotime.
使用 PHP 版本 5.2 中提供的 DateTime 类 可以像这样完成:
从 PHP 5.4 开始,您可以将其作为一行代码执行:
Using the DateTime class available in PHP version 5.2 it would be done like this:
As of PHP 5.4 you can do this as a one-liner:
程序风格 :
面向对象风格 :
混合 1 :
混合 2 :
注释 :
1) 您还可以使用
'Ymd\TH:i:sP'
作为'c'
的替代品> 适合您的格式。2)您输入的默认时区是您服务器的时区。 如果您希望输入针对不同的时区,则需要明确设置您的时区。 但是,这也会影响您的输出:
3) 如果您希望输出的时区与输入的时区不同,您可以明确设置时区:
Procedural style :
Object oriented style :
Hybrid 1 :
Hybrid 2 :
Notes :
1) You could also use
'Y-m-d\TH:i:sP'
as an alternative to'c'
for your format.2) The default time zone of your input is the time zone of your server. If you want the input to be for a different time zone, you need to set your time zone explicitly. This will also impact your output, however :
3) If you want the output to be for a time zone different from that of your input, you can set your time zone explicitly :
这是 PHP 5 之前版本的好函数:
我在最后添加了 GMT 差异,它不是硬编码的。
Here is the good function for pre PHP 5:
I added GMT difference at the end, it's not hardcoded.
这个问题多次发生在毫秒和最后的微秒上,很多时候都是在 4 或 8 结尾。 要将DATE转换为ISO 8601“date(DATE_ISO8601)”,这些是对我有用的解决方案之一:
The problem many times occurs with the milliseconds and final microseconds that many times are in 4 or 8 finals. To convert the DATE to ISO 8601 "date(DATE_ISO8601)" these are one of the solutions that works for me:
对于 PHP 5 之前的版本:
For pre PHP 5: