Laravel 5.1 - 在一个时区保存,在另一个时区显示

Laravel 5.1 - Save in one timezone, display in another

我正在使用 Laravel 5.1,我需要数据库中的所有内容都采用 UTC 格式。但是当显示数据时,它必须在时区 'Europe/Ljubljana' 中(显示也需要根据夏令时而改变)。

该应用程序已经很大,所以我想在尽可能少的地方更改它。这样做的最佳方法是什么?

到目前为止我想到的是扩展模型 class 并为 created_at/updated_at 设置 accessors/mutators(我必须在所有 x 模型中更改它)或者只是创建一个accessors/mutators 的特征并将其放入所有模型中。

但这样做的问题是有些模型不仅有 created_at/updated_at,我需要为每个模型手动添加这些 mutators/accessors。

有没有更好的办法?如果没有,是创造一个特征有意义还是创建某种类型的主模型并将其扩展到所有地方更好?

您可以向模型中受保护的日期数组添加额外的日期字段,这将强制 Laravel 到 return 它们作为日期对象:

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

然后,正如您提到的,您可以设置访问器以在检索到日期时区时修改它们,我个人会创建一个特征来在模型之间共享任何通用的日期访问器,而不是直接扩展模型。