我指的是这个:在PHP中将ISO 8601格式转换为d M Y
。我尝试了与以下相同的方法:echo date("d M Y H:i:s", strtotime($time));
但是时间不会显示为保存在数据库中。它显示了几个小时的差异。
数据库有:2016-03-20T23:30:51+00:00
使用上面的php回声,我得到:21 Mar 2016 00:30:51哪里必须在哪里 20 3月 2016 23:30:51
上面的例子显示了 1 小时 y 的额外?我尝试使用这种格式显示小时和分钟,但显示的时间是错误的。时间显示有几个小时的差。为什么会这样?
您的日期格式2016-03-20T23:30:51+00:00
显示GMT DateTime(旁注:与php/unix时间戳使用的时区相同)。
所以当你写:
echo date( "d M Y H:i:s", strtotime( $time ) );
您获得在系统时区中转换的正确日期。
您可以使用DateTime
类对日期执行更多操作:
$date = new DateTime( $time );
echo $date->format("d M Y H:i:s");
将以原始 (GMT) 格式打印日期。
$date->setTimezone( new DateTimeZone('Europe/Berlin') );
echo $date->format("d M Y H:i:s");
将以"欧洲/柏林"时区打印日期。
<小时 />旁注:在ISO 8601 UTC/GMT中保存日期实际上是最佳选择。
<小时 />- 阅读更多 关于 日期时间
- 阅读更多 关于 日期时区
您的系统使用的是本地时区而不是 UTC,而数据库使用的是 UTC。如果您希望以 UTC 显示,则可以在调用 strtotime 和日期之前使用 http://php.net/manual/en/function.date-default-timezone-set.php 将时区设置为 UTC。