有问题的字符串
2016-07-23T07:00:00.000Z
是a W3C datetime format (W3C DTF)(完整的日期加上小时、分钟、秒和秒的小数部分),可以正确解析,包括。 date_create_from_format](http://php.net/date_create_from_format) 函数的几分之一秒:
$originalDate = "2016-07-23T07:00:00.000Z";
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
它确实创建了一个新的DateTime,然后可以使用 PHP 标准代码对其进行格式化,例如
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
->format('Y-m-d H:i:s'); # 2016-07-23 07:00:00
由于 W3C 格式已经带有时区并且是 UTC,并且您写了想要不同的时区,因此需要指定它:
date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate)
->setTimezone(new DateTimeZone('Asia/Tokyo'))
->format('Y-m-d H:i:s');
这在the previous answer 中不可见(并且可以通过给出的代码控制)的原因是因为date 根据default set timezone in PHP 格式化,其中每个DateTime 都有其单独的时区。
正确解析(包括秒的小数部分)与其他答案的等价物是:
$dateTime = date_create_from_format('Y-m-d\TH:i:s.uO', $originalDate);
date('Y-m-d H:i:s', $dateTime->getTimestamp());
如果您需要完整的日期值和/或对时区的更多控制,希望这能更好地解释它。
格式另见:In what format is this date string?