Reputation: 21
How do I make validation rules for if the start_date
and end_date
are equal only validate that the end time
must be greater than start time
.
$rules = [
'start_date' => 'required|date_format:Y-m-d',
'end_date' => 'required|date_format:Y-m-d|after_or_equal:start_date',
'start_time' => 'nullable|date_format:H:ia',
'end_time' => 'nullable|date_format:H:ia|after:start_time'
];
Upvotes: 0
Views: 592
Reputation: 15319
You can create custom validation for that
<?php
namespace App\Rules;
use Carbon\Carbon;
use Illuminate\Contracts\Validation\Rule;
class EndTime implements Rule
{
private $startDate;
private $endDate;
private $startTime;
private $endTime;
/**
* Create a new rule instance.
*
* @param $startDate
* @param $endDate
* @param $startTime
* @param $endTime
*/
public function __construct($startDate,$endDate,$startTime,$endTime)
{
//
$this->startDate = $startDate;
$this->endDate = $endDate;
$this->startTime = $startTime;
$this->endTime = $endTime;
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$startDate=Carbon::createFromFormat('Y-m-d',$this->startDate);
$endDate=Carbon::createFromFormat('Y-m-d',$this->endDate);
$startTime = Carbon::createFromFormat('H:ia',$this->startTime);
$endTime = Carbon::createFromFormat('H:ia',$this->endTime);
if($startDate==$endDate &&$endTime<$startTime){
return false;
}
return true;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The validation error message.';
}
}
and in your rule
$rules = [
'start_date' => 'required|date_format:Y-m-d',
'end_date' => 'required|date_format:Y-m-d|after_or_equal:start_date',
'start_time' => 'nullable|date_format:H:ia',
'end_time' => ['nullable', 'date_format:H:ia',new EndTime($request->start_date,$request->end_date,$request->start_time,$request->end_time)]
];
Upvotes: 1