我使用类似的字符串创建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)
答案 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