嗨,
使用此方法创建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"]
有人建议我在做什么错吗?
谢谢!
答案 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。