Laravel 2个日期之间的验证差异

时间:2019-06-10 10:59:18

标签: php laravel

我需要在操作存储中检查一些特殊验证

check

我必须验证date_recurring_for_beginning与date_recurring_for_end之间的差额是否为3个月?

有解决方案吗?还是我必须创建一个自定义验证?

2 个答案:

答案 0 :(得分:2)

您可以使用Validator::extend()并创建自定义验证规则。喜欢

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

您可以这样使用:

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

有关自定义验证的更多详细信息。请遵循文档。

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

答案 1 :(得分:0)

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

要使用此规则:

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

希望有帮助。