我指的是: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? 我尝试使用这种格式显示小时和时间分钟,但显示的时间是错误的。时间显示有几个小时的差异。为什么会这样?
答案 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。