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

Laravel 5 how to modify default Date accessors?

我有这样的代码:

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

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

指定默认的依赖于语言环境的日期格式

我认为您可以使用模型的 $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

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

use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;

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

UPD2: 我深入挖掘并发现了重载的 formatLocalized 方法,它允许使用 non-standard "%f" 参数, 表示当前应用程序语言环境中的月份名称。所以我最终将 one-liner 日期格式设置为我的 View 而不是 Model,后者更正确。