如何确保PHP中的有效日期?

时间:2011-07-26 17:10:13

标签: php validation date

我一直在使用date_parse方法进行输入验证,这看起来很好......除了它实际上没有验证日期的正确性。

例如:

date_parse("2010/9/31/"); // returns FALSE 
date_parse("2010-9-31"); // should return FALSE!

如何确认2010-9-31实际上是无效日期?

4 个答案:

答案 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; 
} 
?>

来源:http://php.net/manual/en/function.checkdate.php

答案 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"