检查有效日期问题

时间:2011-12-14 20:30:42

标签: php

我想以'mm / dd / yyyy'格式检查有效日期。当我用isValidDateTime('12/10/2012')调用下面的函数时,它返回false。你能告诉我可能出现的问题吗?

function isValidDateTime($dateTime)
{
    if (preg_match("/^(\d{2})/(\d{2})/(\d{4}) ([0-5][0-9]):([0-5][0-9]):([01][0-9]|2[0-3])$/", $dateTime, $matches)) {
        if (checkdate($matches[1], $matches[3], $matches[2])) {
            return true;
        }
    }

    return false;
}

4 个答案:

答案 0 :(得分:2)

isValidDateTime('12/10/2012')将失败preg_match条件,因为您不提供当天的时间。

此外,由于您在正则表达式中使用/作为分隔符,因此必须转义所有其他斜杠,例如,使用(\d{2})\/(\d{2})而不是(\d{2})/(\d{2})

答案 1 :(得分:2)

这是一种更简单的方法来完成日期验证...它不会验证mm / dd / yyyy格式,但它不需要。

如果传递了无效的日期字符串,DateTime构造函数会抛出异常。获得有效日期后,您可以使用DateTime::format()以您想要的任何格式输出日期。

$str = 'bad date';

try {
  $date = new DateTime($str);
  echo $date->format('m/d/Y');
  // do stuff
} catch(Exception $e) {
  echo "The date '$str' is not valid";
}

答案 2 :(得分:0)

将通过此检查的字符串可能如下所示:     01/02/2011 34/56/12

我不认为这是你要测试的,如果你只是想测试字符串“mm / dd / yyyy”,请使用:

/^(\d{2})\/(\d{2})\/(\d{4})$/

答案 3 :(得分:0)

  1. 你必须逃避斜杠(/ - > \/
  2. checkdate()的定义是:$month, $day, $year(交换第二个和第三个参数)。
  3. function isValidDateTime($dateTime)
    {
        if (preg_match("/^(\d{2})\/(\d{2})\/(\d{4}) ([0-5][0-9]):([0-5][0-9]):([01][0-9]|2[0-3])$/", $dateTime, $matches)) {
            if (checkdate($matches[1], $matches[3], $matches[2])) {
                return true;
            }
        }
    
        return false;
    }
    
    var_dump( isValidDateTime('12/14/2011 00:00:00') ); // true
    var_dump( isValidDateTime('12/14/s2011 00:00:00') ); // false