我有一段代码用于验证正确格式的日期,然后再使用DateTime::createFromFormat()将其提交到数据库插入。我期望日期格式能够从“DD/MM/YYYY”转换为“YYYY-MM-DD”,否则就会出现错误。
$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