我一直在使用date_parse方法进行输入验证,这似乎很好…除了它实际上并没有验证日期的正确性。
例如:date_parse("2010/9/31/"); // returns FALSE
date_parse("2010-9-31"); // should return FALSE!
我如何让它验证2010-9-31实际上是一个无效的日期?
<?php
function is_date( $str )
{
$stamp = strtotime( $str );
if (!is_numeric($stamp))
{
return FALSE;
}
$month = date( 'm', $stamp );
$day = date( 'd', $stamp );
$year = date( 'Y', $stamp );
if (checkdate($month, $day, $year))
{
return TRUE;
}
return FALSE;
}
?>
来源:http://php.net/manual/en/function.checkdate.php
要清楚,2010-9-31
是一个有效的日期,因此您得到的返回是正确的行为。
如果要强制使用特定的格式,可以使用date_parse_from_format
print_r(date_parse_from_format("Y.n.j", $date));
或者,如果这还不够,在解析$date之前对它使用preg_match
。如果您决定使用preg_match,您可能需要问第二个问题。
如果你的意思是我认为你的意思,那么你应该看看checkdate
。
var_dump(checkdate(12, 31, 2000)); // true
var_dump(checkdate(2, 29, 2001)); // false, because was not a leap year
$d = date_parse("2010-9-31");
if(count($d["warnings"]) > 0) {
echo array_shift($d["warnings"]) . "'n";
}
// --> "The parsed date was invalid"