我一直在使用date_parse方法进行输入验证,这看起来很好......除了它实际上没有验证日期的正确性。
例如:
date_parse("2010/9/31/"); // returns FALSE
date_parse("2010-9-31"); // should return FALSE!
如何确认2010-9-31实际上是无效日期?
答案 0 :(得分:3)
<?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;
}
?>
答案 1 :(得分:1)
要明确,2010-9-31
是一个有效的日期,因此您获得的回报是正确的行为。
如果您尝试强制使用特定格式,则可能需要使用date_parse_from_format
print_r(date_parse_from_format("Y.n.j", $date));
或者,如果这还不够,请在解析之前在$ date上使用preg_match
。如果你决定使用preg_match,你可能想问第二个问题。
答案 2 :(得分:0)
如果你的意思是我的意思,那么你应该看看checkdate
。
var_dump(checkdate(12, 31, 2000)); // true
var_dump(checkdate(2, 29, 2001)); // false, because was not a leap year
答案 3 :(得分:0)
$d = date_parse("2010-9-31");
if(count($d["warnings"]) > 0) {
echo array_shift($d["warnings"]) . "\n";
}
// --> "The parsed date was invalid"