我想以'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;
}
答案 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)
/
- > \/
)checkdate()
的定义是:$month, $day, $year
(交换第二个和第三个参数)。
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