为不同的时区序列应用不同的时区

我使用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的日期序列化应用于变异的属性吗?

a434637464 回答:为不同的时区序列应用不同的时区

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3167610.html

大家都在问