2016-07-25 102 views
-1

我想比較兩個日期的驗證。我的意思是用戶將輸入開始日期和結束日期。我想驗證開始日期,它不能是昨天。結束日期不會在開始日期之前。請指導我進行laravel驗證。日期比較驗證Laravel 5.2

回答

0

我會建議你做的日期自定義的驗證, 放置以下函數,你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; 
+0

我將測試並給予反饋到u很快 –

+0

是的,它一定要是不行,在運行此您的終端添加代碼'$ composer dump-autoload'以重新生成自動加載的文件..也不要忘記在ValidationServiceProvider類中包含'use Validator;',use Carbon \ Carbon;'namespaces –