DateTime::createFromFormat()を使用してDB挿入に送信する前に、正しくフォーマットされた日付を検証するためのこのコードブロックがあります。日付形式が「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