【问题标题】:Dealing with well-formed but invalid dates in PHP DateTime在 PHP DateTime 中处理格式正确但无效的日期
【发布时间】:2015-08-19 16:14:59
【问题描述】:

我正在尝试使用 PHP 的 DateTime 来验证日期,但 DateTime 会接受一些格式正确但无效的日期,例如 2015-02-30,它将变成 March 2, 2015,而不会引发异常。使用 DateTime 或其他方法处理此问题有什么建议吗?

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

【问题讨论】:

    标签: php validation date datetime


    【解决方案1】:

    使用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
            )
    
    )
    

    【讨论】:

      【解决方案2】:

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

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

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 2017-04-10
        相关资源
        最近更新 更多