【问题标题】:Laravel 5.3 date validator: equal to or after start_dateLaravel 5.3 日期验证器:等于或在 start_date 之后
【发布时间】:2017-05-11 14:26:20
【问题描述】:

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

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

我尝试使用 after,但它只适用于 end_date > start_date。 当然,我可以使用Validator::extend添加自定义规则,但我想知道我们是否可以不添加自定义规则。

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

谢谢

【问题讨论】:

  • 不是一个合适的解决方案,但如果您不想创建自定义验证,您可以从开始日期减去 1 天,然后使用 after 进行验证
  • 好吧,您可以使用 start_at - 1 天创建一个新变量,然后将其传入,可能并不理想,但应该可以正常工作。
  • 感谢您的建议,但我们可以不调用两次验证器方法吗?
  • 是的,如果您在 $data 变量中插入少于 1 天的变量,则可以
  • 验证器正上方操纵$data变量

标签: php laravel validation laravel-5.3


【解决方案1】:
$validator = Validator::make($data, [
    'start_date'    => 'required|date',
    'end_date'      => 'required|date|after_or_equal:start_date',
]);

使用after_or_equal

【讨论】:

  • 帮了很多忙,谢谢。
【解决方案2】:

在设置验证规则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
    ]
];

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      实际上,在至少使用 Laravel 版本 5.3.31 时,您也可以使用 after_or_equalbefore_or_equal。这可能有助于避免升级到更高的 Laravel 版本。

      【讨论】:

        猜你喜欢
        • 2017-05-11
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        • 2019-09-13
        • 1970-01-01
        • 2014-10-12
        相关资源
        最近更新 更多