Laravel 5如何修改默认日期访问器?

时间:2017-02-15 08:48:08

标签: laravel laravel-5 eloquent php-carbon

我有这样的代码:

public function getUpdatedAtAttribute($value) {
    setlocale(LC_TIME, config('app.locale'));
    return Carbon::parse($value)->formatLocalized(__('DateFormat'));
}

我想为$dates数组中指定的每个字段运行此访问器,而不是为每个模型中的每个日期字段手动指定它,就像默认Carbon实例转换一样。我怎么能这样做?是否有更好的方法为Carbon指定默认的区域设置相关日期格式?

2 个答案:

答案 0 :(得分:0)

我认为您可以使用模型的$ dateFormat变量在所有模型字段上应用通用日期格式:

class Flight extends Model
{
    /**
     * The storage format of the model's date columns.
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

更多信息:https://laravel.com/docs/5.4/eloquent-mutators#date-mutators

答案 1 :(得分:0)

找到一个优雅而简单的解决方案:LocalizedCarbon包。它的工作原理如下:

use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;

UPD:看来这个软件包实际上只翻译了DateDiff,但无论如何我可以看到它是如何工作的,并在我的模型中使用该逻辑。

UPD2 :我深入挖掘并发现了重载formatLocalized方法,它允许使用非标准的"%f"参数,表示当前应用程序区域设置中的月份名称。因此,我最终将单行日期格式设置为View而不是Model,这更为正确。