处理PHP DateTime中格式正确但无效的日期

时间:2015-06-04 21:10:04

标签: php validation date datetime

我正在尝试使用PHP的DateTime来验证日期,但DateTime会接受一些结构良好但无效的日期,例如2015-02-30,它将变为March 2, 2015,而不会抛出异常。使用DateTime或其他方法处理此问题的任何建议?

编辑:谢谢大家的帮助!我通过捕获异常来处理错误,但我没有意识到异常只是抛出错误而不是警告,而这种输入只会发出警告。

2 个答案:

答案 0 :(得分:4)

使用DateTime::getLastErrors()检查错误。形成良好但无效的日期:

$date = '2015-02-30';
DateTime::createFromFormat('Y-m-d', $date);

$errors = DateTime::getLastErrors();
print_r($errors);

收率:

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [10] => The parsed date was invalid
        )

    [error_count] => 0
    [errors] => Array
        (
        )

)

而未成熟的日期$date = '02-30';会产生:

Array
(
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 1
    [errors] => Array
        (
            [5] => Data missing
        )

)

答案 1 :(得分:2)

在使用DateTime()之前,您可以使用checkdate()检查日期是否有效:

$parts = explode('-', '2015-02-30'); 
if (checkdate($parts[1], $parts[2], $parts[0])) {
    // DateTime() stuff here
}

Demo