PHP格式的日期有毫秒可行,但解析失败

时间:2018-03-13 17:04:28

标签: php datetime

我使用以下格式Y-m-d\TH:i:s.v\Z来遵循JavaScript toISOString实施(2011-10-05T14:48:00.000Z)。

如果我有一个DateTime并且我想格式化它,一切正常,但我无法解析使用此格式的字符串。

$format = 'Y-m-d\TH:i:s.v\Z';
$stringDateTime = (new \DateTime())->format($format);
var_dump(date_create_from_format($format,$stringDateTime));

我使用的是PHP 7,我已经使用PHP 7.0,7.1和7.2测试了上面的代码。第3行中我期望的回报是DateTime类,但由于存在解析问题,我得到false

我希望有人能澄清这种行为。 感谢

1 个答案:

答案 0 :(得分:6)

Datetime会处理得很好,你不需要从格式创建。

<?php
$format = 'Y-m-d\TH:i:s.v\Z';
$stringDateTime = (new \DateTime())->format($format);
var_dump(date_create($stringDateTime));

https://3v4l.org/phLE1

<强>结果:

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2018-03-13 18:07:30.005000"
  ["timezone_type"]=>
  int(2)
  ["timezone"]=>
  string(1) "Z"
}

这也有效:

<?php
$format = 'Y-m-d\TH:i:s.u\Z';
$stringDateTime = (new \DateTime())->format($format);
var_dump(date_create_from_format($format, $stringDateTime));

$format = \DateTime::ISO8601;
$stringDateTime = (new \DateTime())->format($format);
var_dump(date_create_from_format($format, $stringDateTime));

https://3v4l.org/FcUqe

object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2018-03-13 18:15:10.011717"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Europe/Amsterdam"
}
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2018-03-13 18:15:10.000000"
  ["timezone_type"]=>
  int(1)
  ["timezone"]=>
  string(6) "+01:00"
}