如何检查2个不同格式的日期字符串是否为有效日期?

时间:2017-10-06 10:32:32

标签: php date

我需要检查2个不同格式的日期字符串是否是有效日期。格式为:YYYY-MM-DDYYYY.MM.DD。我发现只有一个日期字符串格式验证,如下所示:

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

函数已从此answerphp.net

复制

但两种日期格式验证怎么样?怎么解决?谢谢你的帮助

2 个答案:

答案 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_matchDateTime快得多。 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');

函数已从此answerphp.net

复制