Использование DateTime :: createFromFormat () без переноса (неправильной) даты

Пусть неправильная дата 58/57/5654 (или же 58.57.5654) написано в языковой части набора языков, в которых даты не пишутся одинаково (например.: Французские даты, английские даты и немецкие даты). Я хочу позвонить DateTime::createFromFormat() передавая формат даты языка и эту неправильную дату, цель состоит в том, чтобы получить неправильный (или правильный) день, месяц и год в соответствии с языком.

Пример.

  1. Французский пользователь написал 58/57/5654 (или же 58.57.5654). Итак, я хочу получить: (day, month, year) = (58, 57, 5654)

  2. Английский пользователь написал эту же дату. Я получу: (day, month, year) = (57, 58, 5654),

  3. А для немца это было бы так же, как для француза.

С помощью, 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

0

Решение

Я не уверен, что возможно отключить эту функцию, но вы можете проверять если это произошло:

$date = \DateTimeImmutable::createFromFormat($format, $dateString);

if(!$date || ($date->format($format) !== $dateString)) {
throw new InvalidDateException($dateString);
}

Здесь мы проверяем предоставленную строку даты по дате, которая была создана из этой строки даты, и это укажет нам, произошло ли, как вы выразились, «опрокидывание».

Это потребует некоторой адаптации для работы с вашей базой кода, но, надеюсь, что даст вам общий подход к работе?

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector