嗨,我似乎无法让datetime方法按预期工作?我可能做错了什么?
// Passes OK $dateTime = DateTime::createFromFormat('d/m/Y','12/12/2012' ); var_dump($dateTime); // should fail but returns - 2016-09-25 $dateTime = DateTime::createFromFormat('d/m/Y','56/56/2012' ); var_dump($dateTime); // correctly returns False $dateTime = DateTime::createFromFormat('d/m/Y','56/56/fail' ); var_dump($dateTime); // should fail but returns 2019-08-29 09:58:10 $dateTime = DateTime::createFromFormat('m/d/Y','90/90/2012' ); var_dump($dateTime);
关于DateTime :: createFromFormat的事情是它识别出两种意外输入:产生错误的类型以及产生警告的类型.
诸如’56 / 56 / fail’之类的输入会产生错误,因此返回false并且一切都很好.然而,’56 / 56/2012’没有给出错误而是警告,并且实际上被解析为2012年第56个月的第56天.由于2012年没有56个月,PHP内部将此更改为2016年8个月= 8月2016年.由于那个月没有56天,我们还有2016年9月(56 – 31)天= 2016年9月25日的补偿.所以虽然出乎意料,但这实际上是正确的.
如果要禁止此自动调整,则必须包装DateTime工厂方法并使用DateTime::getLastErrors
作为参考:
$dateTime = DateTime::createFromFormat('d/m/Y','56/56/2012'); $errors = DateTime::getLastErrors(); if (!empty($errors['warning_count'])) { echo "Strictly speaking,that date was invalid!\n"; }