验证Laravel 5.2中的日期比较 [英] Date Compare in validation Laravel 5.2

查看:411
本文介绍了验证Laravel 5.2中的日期比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

解决方案

我建议您对日期进行自定义验证, 将以下函数放入您的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);
}

确保您在进行验证的任何地方都包括了Validator外观.

use Illuminate\Support\Facades\Validator;

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.

解决方案

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;

这篇关于验证Laravel 5.2中的日期比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆