我有這塊代碼用於在使用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