【问题标题】:PHP - String does not get identified as datePHP - 字符串没有被识别为日期
【发布时间】:2018-01-25 14:36:29
【问题描述】:

您好,我有一个函数可以检查用户输入的字符串是否为有效日期。用户必须以25-January-2018 格式输入日期,并检查是否可以将其转换为25-01-2018 格式。但是,当我使用月份和日期都是个位数的日期测试函数时,即使输入了有效日期,它也会返回 false。

function validateDate($date){
    $d = DateTime::createFromFormat('d-F-Y', $date);
    return $d && $d->format('j-F-Y') === $date;
}

echo validateDate("03-February-2018"); //Returns false when it should be true

【问题讨论】:

标签: php validation date


【解决方案1】:

您应该将j-F-Y 替换为d-F-Y

j 表示 1 到 31,而 d 表示 01 到 31,那么您的两种格式对于给定日期是不同的。

以下代码有效:

function validateDate($date){
    $d = DateTime::createFromFormat('d-F-Y', $date);
    return $d && $d->format('d-F-Y') === $date;
}

var_dump(validateDate("03-February-2018"));

【讨论】:

    【解决方案2】:

    你的功能可以工作:

       return $d && $d->format('d-F-Y') === $date;
    

    但如果您想检查它是否是有效日期,请使用:

    DateTime::createFromFormat('d-F-Y', "03-February") // returns false if not a valid date & Object if valid
    

    【讨论】:

      【解决方案3】:

      使用strtotime()功能更好。

      function validateDate($date){
         $timestamp = strtotime($date);
         $newDate = date('d-F-Y', $timestamp); 
         return ($timestamp && $newDate);
      }
      
      echo validateDate("03-February-2018");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        相关资源
        最近更新 更多