如何使用laravel中的验证使输入日期字段大于或等于另一个日期字段

meg*_*age 7 php validation blade laravel-4

嗨,我使用laravel开发应用程序有任何方法可以使用验证使输入日期字段大于或等于另一个日期字段.

我知道我可以通过jquery实现这一点,我已经有了这个工作,但我想知道这是否可以通过laravel验证实现,因为laravel已经有一些预定义的验证.

例如

protected $validationRules = array
    (   
      'a' => 'date',
      'b' => 'date|(some validation so that the b value is greater than or equal to that of 'a')'
    );
Run Code Online (Sandbox Code Playgroud)

编辑

如果有任何其他方法使用laravel概念解决问题请告诉我

我试过了

Validator::extend('val_date', function ($attribute,$value,$parameters) {
    return preg_match("between [start date] and DateAdd("d", 1, [end date])",$value);
});
Run Code Online (Sandbox Code Playgroud)

提前致谢

Emi*_*man 22

我有同样的问题.before并且after当日期可能相同时不起作用.这是我的简短解决方案:

注意: Laravel 5.3.25及更高版本具有新的内置规则:before_or_equalafter_or_equal


// 5.1 or newer
Validator::extend('before_or_equal', function($attribute, $value, $parameters, $validator) {
    return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value);
});

// 5.0 & 4.2
Validator::extend('before_or_equal', function($attribute, $value, $parameters) {
    return strtotime(Input::get($parameters[0])) >= strtotime($value);
});
Run Code Online (Sandbox Code Playgroud)
$rules = array(
    'start'=>'required|date|before_or_equal:stop',
    'stop'=>'required|date',
);
Run Code Online (Sandbox Code Playgroud)

  • @ user3253002您可以将第一个代码块放在[服务提供商]中(https://laravel.com/docs/master/providers) (2认同)

Dav*_*len 8

Emil Aspman的回答是正确的,但对Laravel 5.2不起作用.这个解决方案适用于Laravel 5.2:

 Validator::extend('before_equal', function($attribute, $value, $parameters, $validator) {
     return strtotime($validator->getData()[$parameters[0]]) >= strtotime($value);
 });
Run Code Online (Sandbox Code Playgroud)


Vit*_*Kos 0

正确的解决方案是使用自己的规则扩展验证器。文档中的一个简单示例:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容