Php 正在验证Laravel请求中的引导日期时间选择器
我正在使用Bootstrap datetime picker,我正在尝试验证控制器中的日期,但它总是给我一个错误,告诉我格式不正确 但是,我可以从请求数据创建一个新的Carbon date对象,但是我无法使用相同的格式验证请求对象 这会抛出一个错误,说明from与格式不匹配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',
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循环更好、更优雅的解决方案。但有时需要动态构建验证规则。