DateTime :: createFromFormat不起作用(PHP 7.2)

时间:2018-08-03 09:39:06

标签: php

嗨,

使用此方法创建DateTime对象时遇到一些问题:

DateTime::createFromFormat(DateTime::RFC3339_EXTENDED, '2018-07-30T20:03:25.000+02:00')

或与此:

DateTime::createFromFormat(DateTime::RFC3339_EXTENDED, '2018-07-30T20:03:25.000+02:00', $ev = new DateTimeZone('Europe/Vienna'))

这是我在两种情况下遇到的错误:

"errors" => array:2 [▼
20 => "The format separator does not match"
21 => "The timezone could not be found in the database"]

有人建议我在做什么错吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

不幸的是,

DateTime::createFromFormat不支持PHP的所有日期格式字符,包括v毫秒。 RFC3339_EXTENDED解析为 Ymd \ TH:i:s.vP ,其中包含此字符-其作用是常量不能用于解析日期,而只能用于显示日期

一种解决方法是改用包含u格式字符(微秒)的手动格式字符串,如下所示:

$d = DateTime::createFromFormat('Y-m-d\TH:i:s.uP', '2018-07-30T20:03:25.000+02:00');
echo $d->format('Y-m-d H:i:s');
// 2018-07-30 20:03:25

注意:显然,这意味着微秒值将比其应小1000倍-如果此粒度级别很重要,则您需要在返回对象的途中将其乘以1000。

编辑:Parsing v made it into PHP 7.3