Laravel:如何在模型属性转换上设置日期格式?

时间:2016-06-16 11:11:08

标签: laravel date laravel-5 casting

我有模特:

protected $casts = [
    'date' => 'date',
];

laravel是否有能力设置强制转换格式,例如:

protected $casts = [
    'date' => 'date_format:d/m/yyyy',
];

EDITED

我试过了:

模特:

protected $dateFormat = 'm/d/Y';

protected $dates = ['driver_expiration', 'created_at', 'updated_at', 'deleted_at'];

protected $casts = [
    'driver_expiration'     => 'date',
];

我将日期(driver_expiration)保存为'01 / 012016'但日期已保存。

laravel文档: https://laravel.com/docs/5.1/eloquent-mutators 告诉我们$ dateFormat仅适用于时间戳('created_at','updated_at','deleted_at')

5 个答案:

答案 0 :(得分:21)

laravel 5.6 后,

您可以单独自定义Eloquent日期和日期时间转换的格式:

protected $casts = [
    'birthday'  => 'date:Y-m-d',
    'joined_at' => 'datetime:Y-m-d H:00',
];

将模型序列化为数组或JSON数据时使用此格式

答案 1 :(得分:15)

您可以使用mutators来设置您喜欢的格式,而不是转换日期格式:

例如,如果您的列名为date,则可以将以下函数添加到模型中:

public function setDateAttribute( $value ) {
  $this->attributes['date'] = (new Carbon($value))->format('d/m/y');
}

使用CamelCase,setDateAttribute始终采用set[ColumnName]Attribute格式。 date部分中的$this->attributes['date']也必须与表格中的实际列名相匹配。

当您在数据库中createupdate记录时,上述函数会自动更改格式。

注意:您可能需要将use Carbon\Carbon语句添加到模型的顶部以使用Carbon库。

Take a look at other examples here

<强>更新

您可以选择使用以下方式定义date列的格式:

protected $dateFormat = 'Y-m-d';

答案 2 :(得分:3)

只需添加到模型中:

public class HelloPojo implements RequestHandler<Map<String, String>, String>

这个Eloquent的方法最初返回一个Carbon实例,因此您可以获取该实例并调用其format()方法。如果您希望将此解决方案应用于所有模型,只需创建一个从Eloquent扩展的新类,并将此方法放在那里,这样您就可以从这个新类扩展模型。

答案 3 :(得分:1)

广播不受Collection对象的影响。它用于json和数组格式。如果您需要个人演员,可以使用

 $user->date->format('m-d-Y');

答案 4 :(得分:0)

我创建了新的模型属性:

protected $datesConvert = ['driver_expiration'];

然后我更新了我的基本模型,如:

public function save(array $options = [])
{
    if(isset($this->datesConvert)){
        foreach($this->datesConvert as $date){
            $this->attributes[$date] = \Carbon\Carbon::createFromFormat('d/m/Y', $this->attributes[$date])->format('Y-m-d');
        }
    }

    parent::save($options);

}

public function getAttribute($key)
{
    $value = parent::getAttribute($key);

    if(isset($this->attributes[$key])){
        if(isset($this->datesConvert)  &&  in_array($key, $this->datesConvert)){
            $value = \Carbon\Carbon::createFromFormat('Y-m-d', $value)->format('d/m/Y');
        }

    }

    return $value;
}

这个解决方案适合我。代码可以移动到特征。格式可以放在$ datesConvert格式='d / m / Y';