验证Laravel 5.2中的日期比较

时间:2016-07-25 08:09:47

标签: validation laravel-5.2

我想在验证中比较两个日期。我的意思是用户将输入开始日期和结束日期。我想验证开始日期,它不能是昨天。结束日期不会在开始日期之前。请指导我进行laravel验证。

1 个答案:

答案 0 :(得分:1)

我建议您对日期进行自定义验证, 将以下函数放在App\Providers\ValidationServiceProviderboot()方法

 //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);
    });

我定义了三个新的自定义验证,一个用于日期相同或更早,第二个用于更早的日期,第三个用于更早的时间,如果不需要时间验证,则只需删除它们。

您必须在语言验证文件中放置相应的错误消息,并在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',

然后您可以随意使用自定义验证,如以下代码段所示。

$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);
}

确保您在验证时已包含验证器外观。

use Illuminate\Support\Facades\Validator;