PHP - 字符串未标识为日期

时间:2018-01-25 14:36:30

标签: php validation date

您好我有一个函数检查用户输入字符串是否是有效日期。用户必须以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

3 个答案:

答案 0 :(得分:3)

您应该将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"));

答案 1 :(得分:0)

您的功能可以运作:

   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

答案 2 :(得分:0)

更好地使用strtotime()功能。

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

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