Carbon::createFromFormat报Unexpected data found错误排查求助
错误原因与解决办法
核心问题
你遇到的"Unexpected data found. Trailing data"错误,根源是Carbon指定的日期格式字符串和前端传入的实际日期格式完全不匹配。
具体分析
- 前端
<input type="datetime-local">返回的是标准ISO日期格式:YYYY-MM-DDTHH:mm:ss(比如你示例里的2018-01-31T18:00:00),包含T分隔符和秒数部分。 - 但你代码中用的Carbon格式是
'd/m/Y H:i'(日/月/年 时:分),和传入格式完全不符。Carbon解析时会发现多余的T和秒数字符,因此抛出Trailing data错误。
解决方法
方法1:修改Carbon解析格式匹配前端输入
把代码中的格式字符串改成对应datetime-local的格式:
$fe_ini = Carbon::createFromFormat('Y-m-d\TH:i:s', $request->fecha_inicial);
(注:T前加反斜杠是因为它是Carbon格式的特殊字符,需要转义)
或者用更简便的自动识别方式:
$fe_ini = Carbon::parse($request->fecha_inicial);
方法2:统一前后端日期格式(可选)
如果坚持要用d/m/Y H:i格式解析,需要修改前端逻辑:要么更换输入类型(比如用普通文本框搭配支持该格式的日期选择器),要么通过JS把datetime-local返回的ISO格式转换成d/m/Y H:i再提交。
关于store函数的疑问
如果store函数里同样用Carbon::createFromFormat('d/m/Y H:i', $request->fecha_inicial)却没报错,大概率是store时前端传入的日期格式和update时不一致——比如store用的是手动输入d/m/Y H:i格式的输入框,而update用了datetime-local,导致格式不统一。
内容的提问来源于stack exchange,提问作者Rodri6uez
相关产品推荐
相关产品推荐

