为什么php DateTime对象不会为我输入无效的日期错误?例如,
$date_test = '13-10-31';
$datetime = new DateTime();
$date = $datetime->createFromFormat('Y-m-d', $date_test);
$date_errors = $datetime->getLastErrors();
print_r($date_errors);
结果,
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 0
[errors] => Array
(
)
)
我已将日期格式设置为“ Y-m-d”,即yyyy-mm-dd,因此“ 13-10-31”应该是错误输入,不是吗?
编辑
如果我将此行$datetime->createFromFormat('Y-m-d', $date_test);
更改为
$datetime->createFromFormat('YY-m-d', $date_test);
无论输入什么内容,都会出现错误。例如,
$date_test = '2013-10-31';
结果,
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 2
[errors] => Array
(
[4] => Unexpected data found.
[10] => Data missing
)
)
为什么!??
参考方案
您的日期是有效日期,但是您的代码不正确,因为DateTime::createFromFormat()
和getLastErrors()
一样都是静态函数。您的示例代码应为:-
$date_test = '13-10-31';
$date = \DateTime::createFromFormat('Y-m-d', $date_test);
$date_errors = \DateTime::getLastErrors();
print_r($date_errors);
但是,由于10月31日(13-10-31)是有效日期,因此仍然不会有任何错误。当您提供'13'
作为年份时,DateTime将其强制转换为整数13
,因此,它是有效的年份。
如果要舍弃无效的两位数年份,则必须编写自己的验证函数。
我建议您仔细阅读PHP Date and Time extensions documentation
PHP-将日期插入日期时间字段 - php我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数
PHP-如何获取类的成员函数列表? - php如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…