我需要检查2个不同格式的日期字符串是否是有效日期。格式为:YYYY-MM-DD
和YYYY.MM.DD
。我发现只有一个日期字符串格式验证,如下所示:
function validateDate($date)
{
$d = DateTime::createFromFormat('Y-m-d', $date);
return $d && $d->format('Y-m-d') == $date;
}
复制
但两种日期格式验证怎么样?怎么解决?谢谢你的帮助
答案 0 :(得分:1)
请尝试以下两种方法:
$date="2017-09-11";
if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) {
echo true;
} else {
echo false;
}
$date="2017.10.22";
if (preg_match("/^[0-9]{4}.(0[1-9]|1[0-2]).(0[1-9]|[1-2][0-9]|3[0-1])$/",$date)) {
echo true;
} else {
echo false;
}
它使用正则表达式来检查格式是否有效。
OR
$date="2017-09-11";
$dt = DateTime::createFromFormat("Y-m-d", $date);
echo $dt !== false && !array_sum($dt->getLastErrors());
$date="2017.10.22";
$dt = DateTime::createFromFormat("Y.m.d", $date);
echo $dt !== false && !array_sum($dt->getLastErrors());
它使用DateTime
检查两种格式的日期。
编辑虽然两者都是不错的解决方案,benchmarks表明在这种情况下,preg_match
比DateTime
快得多。 https://3v4l.org/H8C73
答案 1 :(得分:0)
复制original function,指定格式为第二个参数,然后运行两次函数;正如评论中已经提到的那样。
function validateDate($date, $format = 'Y-m-d H:i:s')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
$isValid = validDate($date, 'Y-m-d') || validDate($date, 'Y.m.d');
复制