Samir Guiderk
Samir Guiderk

Reputation: 332

Laravel validation difference between 2 dates

I need to check some special validation in my action store

public function store(Request $request) { 

    $this->validate($request, [
        'practice'=>'required|max:100',
        'project'=>'required',
        'work_place'=>'required',
        'telephone_1'=>'required',
        'date_recurring_for_beginning' => 'required|date',
        'date_recurring_for_end' => 'required|date|after_or_equal:date_recurring_for_beginning',
        ]);

    RequestCollaborator::create($request->all());

    return redirect()->route('requestsCollaborator.index')
        ->with('flash_message',
            trans('request.request_created'));
}

I have to validate if the difference between date_recurring_for_beginning and date_recurring_for_end is 3 months?

there is any solution for doing this or I have to create a custom validation?

Upvotes: 1

Views: 5138

Answers (2)

Vikash Pathak
Vikash Pathak

Reputation: 3572

You can use Validator::extend() and can create your custom validation rule. Like

Validator::extend('valid_date_range', function ($attribute, $value, $parameters, $validator) {

    $dateBeginning = \Carbon::createFromFormat('Y-m-d', $parameters[0]); // do confirm the date format.

    $dateEnd = \Carbon::createFromFormat('Y-m-d', $value);

    return $dateBeginning->diffInMonths($dateEnd) == $parameters[1];
});

You can use this like:

'date_recurring_for_end' => 'required|date|valid_date_range:date_recurring_for_beginning,3'

For more details about the custom validation. Please follow the documentation.

https://laravel.com/docs/5.8/validation

Upvotes: 4

Mateus Junges
Mateus Junges

Reputation: 2602

Create a custom validation rule within your app/Providers/AppServiceProvider:

public function boot()
{
    Validator::extend('date_difference', function ($attribute, $value, $parameters, $validator) {
        $firstDate = Carbon::parse($parameters[0]);
        $secondDate = Carbon::parse($parameters[1]);
        $minDifference = (int)$parameters[2];
        if($firstDate->diffInMonths($secondDate) < $minDifference)
            return false;
        return true;
    });
}

To use this rule:

$this->validate([
    'some_field' => 'date_difference:date_one,date_two,3',
]);

Hope it helps.

Upvotes: 3

Related Questions