我有这样的代码:
public function getUpdatedAtAttribute($value) {
setlocale(LC_TIME, config('app.locale'));
return Carbon::parse($value)->formatLocalized(__('DateFormat'));
}
我想为$dates
数组中指定的每个字段运行此访问器,而不是为每个模型中的每个日期字段手动指定它,就像默认Carbon
实例转换一样。我怎么能这样做?是否有更好的方法为Carbon
指定默认的区域设置相关日期格式?
答案 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
,这更为正确。