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