DateTime::createFromFormat不工作(PHP 7.2)

DateTime::createFromFormat不工作(PHP 7.2),php,Php,Hy 我在创建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')) 或者用这个

Hy

我在创建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'))
或者用这个:

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"]
有人建议我做错了什么吗

谢谢

不幸的是,DateTime::createFromFormat不支持PHP的所有日期格式字符,包括表示毫秒的v。RFC3339_扩展解析为Y-m-d\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

编辑:

日期时间::createFromFormat不幸地不支持PHP的所有日期格式字符,包括表示毫秒的v。RFC3339_扩展解析为Y-m-d\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


编辑:

谢谢您的帮助!谢谢你的帮助!