Php DateTime createfromformat不起作用

Php DateTime createfromformat不起作用,php,datetime,Php,Datetime,我使用如下字符串创建php DateTime: $time = '19:14, 9 June 2016 (UTC)'; \DateTime($time); 这工作得很好,但是因为时间来自外部资源,所以有时是无效的 $time = '19:14, 9 oktober 2016 (UTC)'; #oktober instead of october 然后DateTime以一个致命错误结束。为了防止这种情况,我想在使用DateTime之前检查timestring是否有效。我找到的唯一解决方案是使用

我使用如下字符串创建php DateTime:

$time = '19:14, 9 June 2016 (UTC)';
\DateTime($time);
这工作得很好,但是因为时间来自外部资源,所以有时是无效的

$time = '19:14, 9 oktober 2016 (UTC)'; #oktober instead of october
然后DateTime以一个致命错误结束。为了防止这种情况,我想在使用DateTime之前检查timestring是否有效。我找到的唯一解决方案是使用
DateTime::createFromFormat()
。我不太喜欢这个解决方案,因为在new
DateTime()
中我可以使用几种格式,在
createFromFormat
中我必须检查每种格式

但是,第二个问题是,
createFromFormat
甚至无法识别正确的时间字符串:

$time = '19:14, 9 June 2016 (UTC)';
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time);
返回false。但是使用date()格式,它返回完全相同的字符串:

echo date('H:i, d F Y (e)', time());
#12:14, 22 June 2016 (UTC)

Charlotte Dunois和iainn在评论中回答了这个问题。这是一个错误,您必须删除时区(e)周围的括号,更准确地说是结束括号

$time = '19:14, 9 June 2016 (UTC)';
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); #does not work
$valid = \DateTime::createFromFormat('H:i, d F Y e', $time); #works
$valid = \DateTime::createFromFormat('H:i, d F Y (e', $time); #works

Charlotte Dunois和iainn在评论中回答了这个问题。这是一个错误,您必须删除时区(e)周围的括号,更准确地说是结束括号

$time = '19:14, 9 June 2016 (UTC)';
$valid = \DateTime::createFromFormat('H:i, d F Y (e)', $time); #does not work
$valid = \DateTime::createFromFormat('H:i, d F Y e', $time); #works
$valid = \DateTime::createFromFormat('H:i, d F Y (e', $time); #works

你们所在地区的格林尼治标准时间是+7吗?为什么?脚本时区是UTC的,它不工作,但为什么它不工作的时区是需要调查的…如果你删除括号
()
它工作,可能这就是它失败的原因。如果你删除格式字符串的尾随括号,它应该能正常工作-这是DateTime解析器中的一个错误。请看您所在地区的GMT+7?为什么?脚本时区是UTC的,它不工作,但为什么它不工作的时区是需要调查的…如果你删除括号
()
它工作,可能这就是它失败的原因。如果你删除格式字符串的尾随括号,它应该能正常工作-这是DateTime解析器中的一个错误。看见