我正在使用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"
答案 0 :(得分:1)
因为使用before
和after
作为日期会转到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
]);
答案 1 :(得分:0)
说实话,您不需要观看日期格式。完全没必要。我建议你做这样的事情:
$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)) {
}
只要您以正确的格式传递日期,这就足够了。您无需对日期格式进行验证。