【问题标题】:Validating Bootstrap date-time picker in Laravel request在 Laravel 请求中验证 Bootstrap 日期时间选择器
【发布时间】:2018-04-30 00:33:12
【问题描述】:

我正在使用 Bootstrap 日期时间选择器,我正在尝试验证控制器中的日期,但它总是给我一个错误,说格式不正确!。

但是我可以从请求数据创建一个新的 Carbon 日期对象,但我无法使用相同的格式验证请求对象。

这会引发一个错误,指出 from 与格式不匹配 d M Y - H:i

$request->validate([
            'from' => 'date_format:"d M Y - H:i"|required|before:till',
            'till' => 'date_format:"d M Y - H:i"|required|after:from'
    ]);

但是,如果我在没有任何验证的情况下使用数据,则此代码有效。

$ride->from = Carbon::createFromFormat('d M Y - H:i', $request->from)->toDateTimeString();
$ride->till = Carbon::createFromFormat('d M Y - H:i', $request->till)->toDateTimeString();

注意: 引导 dateTimePicker 有 format: "dd MM yyyy - hh:ii" 但我理解 javascript 格式不同于 php 格式。

这里出了什么问题?

编辑:这些是从转储请求对象获得的输入日期。

  "from" => "16 November 2017 - 14:10"
  "till" => "06 November 2017 - 12:00"

【问题讨论】:

  • 显示传递给验证器的输入日期。
  • @LeszekRepie 添加,请查看编辑
  • 用这种格式在php中显示日期时间并检查是否相同。您应该会看到“2017 年 11 月 15 日 - 15:40”(时间会有所不同)

标签: php laravel validation date


【解决方案1】:

因为使用beforeafter 作为日期是去strtotime 来检查doc 中的检查

16 Nov 2017 - 12:10 是无效日期检查not valid date 删除后还要检查- valid date

所以我建议你这样转换

$from = str_replace("-","",$request->from);
$to = str_replace("-","",$request->to);
$request->validate([
        'from' => 'date_format:"d M Y - H:i"|required|before:'.$to,
        'till' => 'date_format:"d M Y - H:i"|required|after:'.$from
]);

【讨论】:

  • 我尝试了您的解决方案,但仍然出现错误。 The from does not match the format d M Y - H:i. The till does not match the format d M Y - H:i.
  • 可能是till 我把to 用你的数据试试till
【解决方案2】:

说实话,您不需要注意日期格式。完全没有必要。我建议你这样做:

$fromDate = Carbon::parse($request->get('from'));
$toDate = Carbon::parse($request->get('to'));

现在上面将允许您比较以下条件的日期:

  • 检查您是否已过了有效日期。
  • 开始日期不应早于当前日期。
  • 截止日期不应早于开始日期。

然后你可以这样做:

if (($startDate === false) || ($toDate === false)) {
    // return error
}

// Check start date is greater than to date
if ($startDate->gt($toDate)) {
}

// Check to date is not less than to date
if ($toDate->lt($toDate)) {
}    

只要您以正确的格式传递日期,这就足够了。无需对日期格式进行验证。

【讨论】:

  • 我知道我可以在验证方法之外做到这一点,但这违背了目的,我主要想检查beforeafter 条件。验证提供了更好、更优雅的解决方案,而不是使用 if else 循环。
  • 是的。但有时需要即时构建验证规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多