我正在尝试使用PHP的DateTime来验证日期,但DateTime会接受一些结构良好但无效的日期,例如2015-02-30
,它将变为March 2, 2015
,而不会抛出异常。使用DateTime或其他方法处理此问题的任何建议?
编辑:谢谢大家的帮助!我通过捕获异常来处理错误,但我没有意识到异常只是抛出错误而不是警告,而这种输入只会发出警告。
答案 0 :(得分:4)
使用DateTime::getLastErrors()
检查错误。形成良好但无效的日期:
$date = '2015-02-30';
DateTime::createFromFormat('Y-m-d', $date);
$errors = DateTime::getLastErrors();
print_r($errors);
收率:
Array
(
[warning_count] => 1
[warnings] => Array
(
[10] => The parsed date was invalid
)
[error_count] => 0
[errors] => Array
(
)
)
而未成熟的日期$date = '02-30';
会产生:
Array
(
[warning_count] => 0
[warnings] => Array
(
)
[error_count] => 1
[errors] => Array
(
[5] => Data missing
)
)
答案 1 :(得分:2)
在使用DateTime()
之前,您可以使用checkdate()
检查日期是否有效:
$parts = explode('-', '2015-02-30');
if (checkdate($parts[1], $parts[2], $parts[0])) {
// DateTime() stuff here
}