PHP DateTime对象不会为我输入无效的日期错误? - php

为什么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…