Пусть неправильная дата 58/57/5654
(или же 58.57.5654
) написано в языковой части набора языков, в которых даты не пишутся одинаково (например.: Французские даты, английские даты и немецкие даты). Я хочу позвонить DateTime::createFromFormat()
передавая формат даты языка и эту неправильную дату, цель состоит в том, чтобы получить неправильный (или правильный) день, месяц и год в соответствии с языком.
Пример.
Французский пользователь написал 58/57/5654
(или же 58.57.5654
). Итак, я хочу получить: (day, month, year) = (58, 57, 5654)
Английский пользователь написал эту же дату. Я получу: (day, month, year) = (57, 58, 5654)
,
А для немца это было бы так же, как для француза.
С помощью, DateTime::createFromFormat($the_format, $the_date);
выполнит бросок на значения дня, месяца и года, если заданные значения неверны. Например: string(10) "58/57/5654"
становится правильным, но нежелательный, Дата string(10) "28/10/5658"
,
Как я мог избежать этого броска?
Увидеть: https://secure.php.net/manual/fr/datetime.createfromformat.php
Я не уверен, что возможно отключить эту функцию, но вы можете проверять если это произошло:
$date = \DateTimeImmutable::createFromFormat($format, $dateString);
if(!$date || ($date->format($format) !== $dateString)) {
throw new InvalidDateException($dateString);
}
Здесь мы проверяем предоставленную строку даты по дате, которая была создана из этой строки даты, и это укажет нам, произошло ли, как вы выразились, «опрокидывание».
Это потребует некоторой адаптации для работы с вашей базой кода, но, надеюсь, что даст вам общий подход к работе?
Других решений пока нет …