DateTime createfromformat doe不起作用

时间:2016-06-22 13:01:22

标签: 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之前检查时间字符串是否有效。我找到的唯一解决方案是使用DateTime::createFromFormat()。我非常不喜欢这个解决方案,因为在新的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)

1 个答案:

答案 0 :(得分:2)

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