how to make an input date field greater than or eq

2019-01-28 01:14发布

问题:

Hi iam developing an application using laravel is there any way to make an input date field greater than or equal to another date field using validation.

I know that i can achieve this through jquery and i have already got that working, but i want to know whether is this achievable through laravel validation since laravel has got some predefined validations.

For Example

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

EDIT

If there is any other approach to solve the problem using laravel concept please tell me

I tried

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

Thanks in advance

回答1:

I had the same problem. before and after does not work when dates could be the same. Here is my short solution:

NOTE: Laravel 5.3.25 and later have new built in rules: before_or_equal and after_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);
});

$rules = array(
    'start'=>'required|date|before_or_equal:stop',
    'stop'=>'required|date',
);



回答2:

Emil Aspman's answer is correct, but doesn't work for Laravel 5.2. this solution works for Laravel 5.2:

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


回答3:

The proper solution would be if you extended the Validator with your own rule. A simple example from the docs:

Validator::extend('foo', function($attribute, $value, $parameters)
{
    return $value == 'foo';
});

Read more here



回答4:

Yes, you can use after:date or before:date like this:

protected $rules = array(
    'date' => 'after:'.$yourDate
);

or alternatively

protected $rules = array(
    'date' => 'before:'.$yourDate
);

It will do exactly what you described. Also check out the official documentation. You can also specify rules of your own using custom validation rules.