我想在创建和编辑表单字段“start_date”和“end_date”中以此格式显示日期 - 2018年2月21日 - 10:00。
在数据库中,日期字段的类型为“datetime”。
因此,在创建新会议的表单中,我有两个日期字段:
<div class="form-row">
<div class="form-group col-md-6">
<label for="start_date">Start Date</label>
<div class="input-group date" data-provide="datepicker">
<input type='text'
name="start_date" value="{{ old('start_date') }}"
class="form-control" placeholder="DD/MM/YYY H:m:s" />
<span class="input-group-addon"><i class="fa fa-calendar text-primary" aria-hidden="true"></i></span>
</div>
</div>
<div class="form-group col-md-6">
<label for="end_date>End Date</label>
<div class="input-group date" data-provide="datepicker">
<input type='text' class="form-control"
value="{{ old('end_date') }}" name="end_date" placeholder="DD/MM/YYY H:m:s"/>
<span class="input-group-addon"><i class="fa fa-calendar text-primary" aria-hidden="true"></i></span>
</div>
</div>
</div>
在编辑表单中,字段相同,唯一的区别是值属性中的值为:“value="{{$conference->start_date}}
”。
在会议模型中,我有以下两种方法:
public function getStartDateAttribute($date)
{
return $date->format('d F Y - H:i');
}
public function getEndDateAttribute($date)
{
return $date->format('d F Y - H:i');
}
然后在store方法中我有了validate和create方法:
public function store(Request $request)
{
$this->validate($request, [
'start_date' => 'required|date_format:d F Y - H:i',
'end_date' => 'required|date_format:d F Y - H:i|after_or_equal:start_date',
]);
$conference = Conference::create([
'start_date' => $request->start_date,
'end_date' => $request->end_date,
]);
}
但在提交表单后,似乎出现了错误:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '21 February 2018 - 10:00' for column 'start_date'
你知道问题出在哪里吗?
答案 0 :(得分:0)
对于MySql,日期列的默认格式为Y-m-d,日期时间的默认格式为Y-m-d H:i:s。所以更改日期然后保存。
public function store(Request $request)
{
$this->validate($request, [
'start_date' => 'required|date_format:d F Y - H:i',
'end_date' => 'required|date_format:d F Y - H:i|after_or_equal:start_date',
]);
$conference = Conference::create([
'start_date' => Carbon::createFromFormat('d F Y - H:i', $request->start_date),
'end_date' => Carbon::createFromFormat('d F Y - H:i', $request->end_date),
]);
}
要将日期字段作为日期而不仅仅是字符串,您必须添加dates
属性,如下所示:
protected $dates = [
'start_date',
'end_date'
];