@baba 发布了更好的解决方案,但发布的代码在某些情况下无法正常工作。
例如,如果您尝试验证此日期“2019-12-313”;
$date = date_parse("2019-12-313");
该函数返回这个数组:
Array
(
[year] => 2019
[month] => 12
[day] => 31
[hour] =>
[minute] =>
[second] =>
[fraction] =>
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 1
[errors] => Array
(
[10] => Unexpected character
)
[is_localtime] =>
)
所以,如果你执行命令:
checkdate($date['month'], $date['day'], $date['year']);
checkdate 将返回一个真值,因为它的值$date['day']
是 31 而不是 313。
为避免这种情况,您可能必须对$date['error_count']
@baba 示例已更新
$date = "2019-12-313";
$date = date_parse($date); // or date_parse_from_format("d/m/Y", $date);
if ($date['error_count'] == 0 && checkdate($date['month'], $date['day'], $date['year'])) {
// Valid Date
}