Nyi Nyi Naing
Nyi Nyi Naing

Reputation: 65

Date Compare in validation Laravel 5.2

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.

Upvotes: 0

Views: 1365

Answers (1)

Mohamed Akram
Mohamed Akram

Reputation: 2117

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;

Upvotes: 1

Related Questions