我在日期选择器中选择的日期采用以下格式
Y-m-d g:i A
因此,使用AM / PM,它在我的输入字段中显示以下内容,这是正确的
当我提交表格时,Laravel不会更新记录,因为我的DATETIME字段在mysql中不知道格式。
我的'日期'字段已添加到$ dates数组中,因此应由Laravel解析
我尝试在我的模型上使用Mutator,但没有成功
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon::createFromFormat('Y-m-d g:i A', $value)->format('Y-m-d H:i:s');
}
原始值未更新。 知道我可能做错了什么吗?
谢谢
答案 0 :(得分:2)
看一下Laravel的date mutators,它会像处理created_at
和其他默认日期一样处理进出数据库的访问和变异日期。
基本上,您需要将date
字段添加到模型上的$dates
数组中,如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'created_at', // Add if you're using timestamps on the model
'updated_at', // Add if you're using timestamps on the model
'deleted_at', // Add if you're using softDeletes on the model
'date'
];
}
这种方式,当模型持久存储到数据库时,它就像DATETIME
那样完成,而当它从数据库读入模型时,它将是Carbon
实例
答案 1 :(得分:1)
看来你的碳功能还可以。但为什么它不起作用,不明白。但我有使用PHP日期函数的解决方案。
public function setDateAttribute($value)
{
$this->attributes['date'] = date("Y-m-d H:i:s", strtotime($value);
}
答案 2 :(得分:1)
Laravel的日期变异器需要'Y-m-d H:i:s'
之类的格式,但您可以使用模型上的$dateFormat
属性来指定不同的格式。 E.g:
protected $dateFormat = 'Y-m-d g:i A';
下的文档中的日期格式部分
或者,您可以使用模型外部的Carbon解析日期,因为$dates
中列出的属性也会接受Carbon实例:
$model->date = Carbon::createFromFormat('Y-m-d g:i A', '2016-11-29 02:00 PM');
这是我通常使用的方法。对我来说,这更像是一个前端问题,你试图将用户友好的格式映射到你的模型/数据库所期望的格式,所以我通常会把这个逻辑放到一个控制器中。