未来20年的日期被视为无效

时间:2018-06-29 10:00:51

标签: laravel date laravel-validation

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 :(得分:3)

来自Unix time的维基百科:

  

在以Unix时间表示为带符号的32位数字的系统上,该表示将在1970年1月1日从00:00:00开始完成2,147,483,647(2 ^ 31-1)秒后结束,该时间将为发生在2038年1月19日UTC,确切的时间取决于不可预测的leap秒。这被称为“ 2038年问题”,其中32位带符号的Unix时间将溢出,并将实际计数变为负数。

并且来自Laravel Validation docs

  

日期

     

根据strtotime PHP函数,验证中的字段必须为有效日期。

这似乎取决于PHP是编译为使用32位时间戳还是使用64位时间戳(请参见讨论here)。如果您使用的是32位PHP,那么唯一的解决方法就是编写自己的验证器,而不依赖于PHP的日期解析(或移至64位PHP)。