我正在使用Laravel增幅器,这是我的日期格式在视图中的显示方式,
20/03/04
我想将其转换为
20-03-04
保存之前的格式, 为此,我尝试在模型中遵循以下代码,
public function setdobAttribute($input)
{
$d= date_create_from_format('d/m/Y',$input);
$this->attributes['dob'] = $d->format('Y-m-d');
}
它对于一列工作正常,但是我想在多列上应用相同的功能,我怎么能做到呢?
protected $casts = [
'dob' => 'date:Y-m-d',
'work_date' => 'datetime:Y-m-d H:00',
];
但是它不起作用。 错误:发现意外数据。找到意外的数据。数据丢失
答案 0 :(得分:0)
public function setDateAttribute( $value ) {
$this->attributes['date'] = (new Carbon($value))->format('d/m/y');
}
使用CamelCase,setDateAttribute的格式始终为set [ColumnName] Attribute。 $ this-> attributes ['date']部分中的日期还必须与表中的实际列名匹配。
在数据库中创建或更新记录时,格式将被上述功能自动更改。
注意:您可能需要在模型顶部添加use Carbon \ Carbon语句以使用Carbon库。
在这里看看其他示例。
更新
(可选)您可以使用以下方法为date
列定义格式:
protected $dateFormat = 'Y-m-d';
我想您可以重写setAttribute
这样的方法:
public function setAttribute($key, $value){
if(in_array($key, 'abstract_keys')){
$this->attributes[$key] = !!$value;
}
else{
parent::setAttribute($key, $value);
}
}
同一个人将获得getAttribute
。
答案 1 :(得分:0)
如果您希望将此作为功能
function changedateformat($origDate)
{
$date = str_replace('/', '-', $origDate );
$newDate = date("d-m-Y", strtotime($date));
return $newDate;
}
需要转换时,请使用res = changedateformat($data);
答案 2 :(得分:-1)
尝试碳格式
echo Carbon::createFromFormat('Y-m-d H', '1975-05-21 22')->toDateTimeString(); // 1975-05-21 22:00:00