У меня есть этот блок кода для проверки правильной отформатированной даты перед отправкой в БД с использованием 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-значный год. Любая идея, где я ошибаюсь?
EDIT
1 - Исправьте дату тестирования как на комментарий OneTrickPony в
2 - я добавил var_dump из $ date_errors переменной. Поскольку формат «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
@ Gordon thx для [3v4l.org] (http://www.3v4l.org), выглядит круто! –
Обратите внимание, что ноябрь имеет только 30 дней;) –