使用iso 8601显示实际时间

时间:2016-03-20 23:17:33

标签: php timestamp iso8601

我指的是:Converting ISO 8601 format to d M Y in PHP

我尝试了同样的事情:echo date("d M Y H:i:s", strtotime($time));

但是时间没有显示为保存在数据库中。它显示出几个小时的差异。

数据库有:2016-03-20T23:30:51 + 00:00

上面的php echo我得到:2016年3月21日00:30:51 在哪里必须是2016年3月20日23:30:51

以上示例显示额外的1小时y? 我尝试使用这种格式显示小时和时间分钟,但显示的时间是错误的。时间显示有几个小时的差异。为什么会这样?

2 个答案:

答案 0 :(得分:2)

您的日期格式2016-03-20T23:30:51+00:00显示GMT日期时间(旁注:与php / unix时间戳使用的TimeZone相同)。

所以当你写:

echo date( "d M Y H:i:s", strtotime( $time ) );

您在系统TimeZone中获得了正确的转换日期。

您可以使用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");

将在' Europe / Berlin'中打印日期时区。

附注:在ISO 8601 UTC / GTM中保存日期实际上是最佳选择。

答案 1 :(得分:1)

您的系统使用的是本地时区而不是UTC,而数据库是UTC。如果您希望以UTC格式显示,可以在调用strtotime和date之前使用http://php.net/manual/en/function.date-default-timezone-set.php将时区设置为UTC。