Применение другого часового пояса для сериализации Eloquent дат - PullRequest
0 голосов
/ 04 ноября 2019

Я сохраняю даты, используя часовой пояс 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"}

Что я пробовал: Я обновил свою функцию черты, чтобы вернуть сериализованную дату

return $this->serializeDate($this->asDateTime($value)->setTimezone($timezone));

Это работает, как и ожидалось, для выходов json, но я больше не могу использовать объект Carbon в другом месте моего кода

Любая идея, как применить сериализацию даты Eloquent для мутированныхатрибуты только при сериализации моделипроисходит?

...