我使用以下格式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
。
我希望有人能澄清这种行为。 感谢
答案 0 :(得分:6)
Datetime会处理得很好,你不需要从格式创建。
<?php
$format = 'Y-m-d\TH:i:s.v\Z';
$stringDateTime = (new \DateTime())->format($format);
var_dump(date_create($stringDateTime));
<强>结果:强>
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));
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"
}