使用 iso 8601 显示实际时间


Displaying actual time using iso 8601

我指的是这个:在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。