我使用UTC时区存储日期以确保数据库的一致性,我无法使用其他时区来显示序列化模型时的日期
我的应用程序设置:
APP_TIMEZONE=UTC
DISPLAY_TIMEZONE=Europe/Paris
我想显示所需时区中的所有日期,以实现我在模型中使用的特质:
trait SetDisplayDateTimezone
{
public function getcreatedAtAttribute($value)
{
$timezone = env('DISPLAY_TIMEZONE','UTC');
return $this->asDateTime($value)->setTimezone($timezone);
}
}
当我访问该属性时,我按预期的方式工作,我得到了应用了正确时区的碳对象
Model::find(1)->created_at;
Carbon @1572610747 {#68 ▼
date: 2019-11-01 13:19:07.0 Europe/Paris (+01:00)
}
但在进行序列化时(输出json时)似乎不起作用
我期望的是:
{"id": 1,"created_at": "2019-11-01 13:19:07","updated_at": "2019-11-01 12:19:07"}
我得到的:
{"id": 1,"created_at": "2019-11-01T12:19:07.000000Z","updated_at": "2019-11-01 12:19:07"}
我尝试过的事情: 我已经更新了我的trait函数,以返回序列化的日期
return $this->serializeDate($this->asDateTime($value)->setTimezone($timezone));
这对于json输出可以正常工作,但是我无法再在代码中的其他地方使用Carbon对象
有什么想法仅在模型序列化发生时如何将Eloquent的日期序列化应用于变异的属性吗?