Laravel中日期字段无法加载数据库日期值的问题排查
解决Laravel中date类型输入框无法显示日期值的问题
问题根源
HTML的<input type="date">控件对value的格式有严格要求,必须是纯YYYY-MM-DD格式,而你当前输出的是带时分秒的2018-05-10 00:00:00——虽然数据库里的date字段确实是无时分秒的格式,但Laravel模型默认会把日期字段转换为Carbon对象,直接输出时Carbon会返回带时分秒的完整时间字符串,导致浏览器无法解析,所以输入框看起来是空的(但实际上value属性里已经填充了值)。
几种实用解决方案
方案1:模板中直接格式化输出
利用Carbon实例自带的format()方法,直接在模板里生成符合要求的日期格式:<input type="date" name="date" id="date" class="form-control" style="width: 100%; display: inline;" onchange="invoicedue(event);" required value="{{$shipment->date->format('Y-m-d')}}">方案2:给模型添加日期访问器(推荐)
在你的Shipment模型中添加字段访问器,统一处理该字段的输出格式,这样所有视图里使用$shipment->date时都会自动返回纯日期格式:public function getDateAttribute($value) { return \Carbon\Carbon::parse($value)->format('Y-m-d'); }之后模板里可以继续使用原来的写法
{{$shipment->date}}即可,无需每次都手动格式化。方案3:控制器中提前格式化
在编辑页面的控制器方法里,先把日期格式处理好再传给视图:public function edit(Shipment $shipment) { $shipment->date = $shipment->date->format('Y-m-d'); return view('shipments.edit', compact('shipment')); }
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

