我有这块代码用于在使用DateTime::createFromFormat()提交到数据库插入之前验证正确格式化的日期。我期待日期格式将“DD/MM/YYYY”转换为“YYYY-MM-DD”,否则会引发错误。使用DateTime验证年份:: createFromFormat
$dateofbirth = trim($_POST['dateofbirth']);
$date = DateTime::createFromFormat('d/m/Y', $dateofbirth);
$date_errors = DateTime::getLastErrors();
var_dump($date_errors);
if ($date_errors['warning_count'] + $date_errors['error_count'] > 0) {
$dobError = 'Date '.$dateofbirth.' is not a valid DD/MM/YYYY format.';
$hasError = true;
} else {
$mysql_dob = $date->format('Y-m-d');
}
error_log($dateofbirth.' -> '.$mysql_dob);
此日期作品
$dateofbirth = '30/11/1980'; => 1980-11-30
但是这一次失败默默
$dateofbirth = '30/11/80'; => 0080-11-30
,因为我期待被通知的缺失世纪数字。我已阅读格式化规则,并使用大写字母'Y'来确保4位数的年份。任何想法,我要去哪里错了?
编辑
1 - 修改考试日期按OneTrickPony的评论
2 - 我增加了$ date_errors变量的的var_dump。由于格式为'd/m/Y',输入为'30/11/80',我预计会有错误或警告,但我没有收到。
array(4) {
["warning_count"]=>
int(0)
["warnings"]=>
array(0) {
}
["error_count"]=>
int(0)
["errors"]=>
array(0) {
}
}
30/11/80 -> 0080-11-30
它不会默默失败:http://3v4l.org/bap8p – Gordon 2013-05-01 16:30:00
@Gordon thx for [3v4l.org](http://www.3v4l.org),看起来很酷! – 2013-05-01 16:32:41
请注意,11月只有30天;) – 2013-05-01 16:33:12