Даты 20 лет в будущем считаются недействительными - PullRequest
0 голосов
/ 29 июня 2018

Валидатор Laravel не принимает даты более 20 лет спустя:

Route::get('test', function() {
    $input = ['date' => '2039-01-01'];
    $rule = ['date' => 'date'];
    $v = \Illuminate\Support\Facades\Validator::make($input, $rule);
    return 'Fails: '.$v->fails();
});

Следующий пример возвращает true, несмотря на то, что дата верна. Но когда я меняю 2039 на 2037, это работает. Как я могу сделать так, чтобы валидатор всегда возвращал false?

1 Ответ

0 голосов
/ 29 июня 2018

Из Википедии Время Unix :

В системах, где представление времени Unix представляет собой 32-разрядное число со знаком, представление завершится после завершения 2 147 483 647 (2 ^ 31 - 1) секунд с 00:00:00 1 января 1970 года, что произойдет 19 января 2038 года по Гринвичу, точное время зависит от непредсказуемых високосных секунд. Это называется «проблемой 2038 года», когда 32-битное знаковое время Unix будет переполнено, а фактический счетчик станет отрицательным.

И из Документы по проверке Laravel :

дата

Проверяемое поле должно быть действительной датой в соответствии с strtotime функцией PHP.

Похоже, это зависит от того, скомпилирован ли PHP для использования 32-битных или 64-битных меток (см. Обсуждение здесь ). Если у вас 32-битный PHP, ваш единственный путь вперед - написать собственный валидатор, который не зависит от парсинга дат PHP (или перейти на 64-битный PHP).

...