创建错误:日期时间格式无效:1292

时间:2018-02-21 11:58:46

标签: laravel

我想在创建和编辑表单字段“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'

你知道问题出在哪里吗?

1 个答案:

答案 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'
    ];