Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正在验证Laravel请求中的引导日期时间选择器_Php_Laravel_Validation_Date - Fatal编程技术网

Php 正在验证Laravel请求中的引导日期时间选择器

Php 正在验证Laravel请求中的引导日期时间选择器,php,laravel,validation,date,Php,Laravel,Validation,Date,我正在使用Bootstrap datetime picker,我正在尝试验证控制器中的日期,但它总是给我一个错误,告诉我格式不正确 但是,我可以从请求数据创建一个新的Carbon date对象,但是我无法使用相同的格式验证请求对象 这会抛出一个错误,说明from与格式不匹配d M Y-H:i $request->validate([ 'from' => 'date_format:"d M Y - H:i"|required|before:till',

我正在使用Bootstrap datetime picker,我正在尝试验证控制器中的日期,但它总是给我一个错误,告诉我格式不正确

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

这会抛出一个错误,说明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();
注: bootstrap dateTimePicker有
格式:“dd-MM-yyyy-hh:ii”
,但我知道javascript格式不同于php格式

这里出了什么问题

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

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

因为对日期使用
之前
之后
将转到strotime以检查此签入

2017年11月16日-12:10<代码>无效日期检查删除后也检查<代码>-

所以我建议你像这样皈依

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

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

$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)) {
}    

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

显示传递给验证器的输入日期。@LeszekRepie已添加,请使用此格式查看php中的editDisplay datetime,并检查是否相同。您应该看到“2017年11月15日-15:40”(时间将有所不同)我尝试了您的解决方案,但仍然出现错误<代码>发件人与格式d M Y-H:i不匹配。till与格式d M Y-H:i不匹配。可能是
till
我用
尝试
till
与您的数据我知道我可以在验证方法之外进行,但这与目的不符,我主要想检查
之前的
之后的
条件。验证提供了比使用if-else循环更好、更优雅的解决方案。但有时需要动态构建验证规则。