Date Compare in validation Laravel 5.2

二次信任 提交于 2019-12-10 12:08:26

问题


I want to compare two date in validation. I mean the user will input start date and end date .I want to verify the start date, it can't be yesterday . And end date will not be before day of start date. Please guide me in laravel validation.


回答1:


I would suggest you to make your custom validation for dates, Place the following function in your App\Providers\ValidationServiceProvider class boot() method

 //end date must be equal to value or greate than value
    Validator::extend('dateequalorearlier', function($attribute, $value, $parameters, $validator) {
        $date_compare = array_get($validator->getData(), $parameters[0]);
        return Carbon::parse($date_compare) >= Carbon::parse($value);
    });

  //end date must be greater
    Validator::extend('dateearlier', function($attribute, $value, $parameters, $validator) {
        $date_compare = array_get($validator->getData(), $parameters[0]);
        return Carbon::parse($date_compare) > Carbon::parse($value);
    });

   //start time must be earlier 
    Validator::extend('earliertime', function($attribute, $value, $parameters, $validator) {
        $time_compare = array_get($validator->getData(), $parameters[0]);
        return Carbon::parse($time_compare) > Carbon::parse($value);
    });

There are three new custom validation I have defined, one is for date equal or earlier, second one is for date earlier and third one is for earlier time incase you need time validation, if not necessary just remove those .

You must place appropriate error message in your Language validation file, find it in resources\lang\validation.php.

'dateequalorearlier' => 'The Start date must be an earlier date or Same date from End date',
'dateearlier' => 'The Start date must be an earlier date from End date',
'earliertime' => 'The Start time must be an earlier time from End time',

and you can then use the custom validation where ever you want as in the following code snippet.

$rules = [
'start_date' => 'required|date|dateequalorearlier:end_date',
'end_date' => 'required|date',
];
$messages = [
    'start_date.required' => 'Start date is a required field.',
    'start_date.date' => 'Start date must be in a valid date format (YYYY-MM-DD).',
    'start_date.dateequalorearlier' => 'Start date must be an earlier date or Same date from End date.',
    'end_date.required' => 'End date is a required field.',
    'end_date.date' => 'End date must be in a valid date format (YYYY-MM-DD).',
];

$validator = Validator::make($request->all(),$rules,$messages);
if($validator->fails()){
    $this->throwValidationException($request,$validator);
}

make sure you have included validator facade where ever you are doing validation..

use Illuminate\Support\Facades\Validator;


来源:https://stackoverflow.com/questions/38562603/date-compare-in-validation-laravel-5-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!