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?
答案 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时间将溢出,并将实际计数变为负数。
日期
根据
strtotime
PHP函数,验证中的字段必须为有效日期。
这似乎取决于PHP是编译为使用32位时间戳还是使用64位时间戳(请参见讨论here)。如果您使用的是32位PHP,那么唯一的解决方法就是编写自己的验证器,而不依赖于PHP的日期解析(或移至64位PHP)。