Laravel - проверка даты в формате не работает должным образом - PullRequest
1 голос
/ 07 января 2020

Мой код:

$data['from'] = '2020-03-20 20:30:00';
$data['to'] = '2020-03-21 00:45:00';
$validity = \Validator::make($data, [
    'from' => ['date_format:Y-m-d H:i:s'],
    'to' => ['date_format:Y-m-d H:i:s']
]);

// This if gets true, and the error message is:

Не соответствует формату Ymd H: i: s

if($validity->fails()) {
    dd($validity->errors());
}

и удивительно, когда я меняю 00:45:00 до 01:45:00 это не проникнет внутрь, если. Как я могу это исправить?

Ответы [ 2 ]

5 голосов
/ 07 января 2020

Поскольку ваша локаль установлена ​​на Asia/Tehran, время 2020-03-21 00:45:00 фактически недопустимо. В соответствии с https://www.timeanddate.com/time/change/iran/tehran:

В субботу, 21 марта 2020 года, часы 00:00:00 переводятся на 1 час вперед в субботу, 21 марта 2020 года, 01:00:00. вместо этого используется местное летнее время.

Это означает, что время между 00:00:00 и 01:00:00 никогда не наступает. Поскольку валидатор даты Laravel внутренне использует синтаксический анализ даты PHP, этот анализ завершается неудачно и возникает ошибка. Если вы хотите проверить только, является ли дата заданным форматом, игнорирующим какие-либо причуды перехода на летнее время, то вы можете использовать date_default_timezone_set, чтобы временно установить для языкового стандарта тот, который не учитывает переход на летнее время.

0 голосов
/ 07 января 2020

Попробуйте

$validity = \Validator::make($data, [
    'from' => 'date_format:Y-m-d H:i:s',
    'to' => 'date_format:Y-m-d H:i:s'
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...