Laravel在保存到数据库之前转换日期格式

时间:2019-09-04 04:43:19

标签: laravel laravel-5.8

我正在使用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',
];

但是它不起作用。 错误:发现意外数据。找到意外的数据。数据丢失

3 个答案:

答案 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

enter link description here