Laravel 5.3 date validator:等于或等于start_date

时间:2016-12-27 09:50:34

标签: php laravel validation laravel-5.3

我正在使用Laravel 5.3来验证事件的start_date和end_date。 end_date应该等于start_date或after date。 end_date >= start_date

$validator = Validator::make($data, [
    'start_date'    => 'required|date',
    'end_date'      => 'required|date|after:start_date',
]);

我尝试在之后使用,但它仅适用于end_date>开始日期。 当然,我可以使用Validator::extend添加自定义规则,但我想知道我们是否可以不添加自定义规则。

有没有办法添加否定规则或添加> =规则?

由于

4 个答案:

答案 0 :(得分:25)

$validator = Validator::make($data, [
    'start_date'    => 'required|date',
    'end_date'      => 'required|date|after_or_equal:start_date',
]);

使用 after_or_equal

答案 1 :(得分:4)

实际上,在使用至少Laravel版本after_or_equal时,您还可以使用before_or_equal5.3.31。这可能有助于避免升级到更高级的Laravel版本。

答案 2 :(得分:3)

升级到 5.4 ,您可以使用after_or_equal 看到 https://laravel.com/docs/5.4/validation#rule-after-or-equal

答案 3 :(得分:1)

在设置验证规则after_or_equal:nowdate_format时,请注意不要设置小时,分钟或秒的格式!

例如:

$validationRules = [
    'my_time_start' => [
        'date_format:Y-m-d',// format without hours, minutes and seconds.
        'after_or_equal:now'
    ]
];

Laravel将所有日期字段传递到strtotime()函数中。 包括now字符串。 并且strtotime('now')将返回带有当前分钟,小时和秒的UNIX时间戳

例如,今天是2020-05-03。 当您将日期值2020-05-03发送到脚本中时,Laravel会将2个值传递到strtotime()中进行比较:

strtotime('2020-05-03'); // always 1588489200
strtotime('now'); // NOT PREVIOUS VALUE, a different value each second, timestamp including current minutes, hour and seconds.

您将始终无法通过验证(不包括一天中的1秒钟)。

要修复它,您应该使用:

$validationRules = [
    'my_time_start' => [
        'date_format:Y-m-d',// format without hours, minutes and seconds.
        'after_or_equal:' . date('Y-m-d'), // not 'now' string
    ]
];