Как исправить часовой пояс Carbon после обновления до Laravel 5.8

После обновления до Laravel 5.8 поле «created_at» возвращает строку, подобную этой

"createdAt": "2019-05-01T16:36:25.000000Z"

Но я хочу вернуть объект, как раньше в Laravel 5.7, вот так:

"createdAt": { "date": "2019-05-01 19:36:25.000000", "timezone_type": 3, "timezone": "Азия/Багдад" }

Я искал в Интернете ничего об этом, и в руководстве по обновлению тоже ничего об этом не было. Я возвращаю его из ресурсов точно так же, как JSON:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'createdAt' => $this->created_at,
    ];
}

person user2682025    schedule 02.05.2019    source источник


Ответы (2)


Вот как я мог это решить:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'createdAt' => $this->created_at,
        'date' => Carbon::serializeUsing(function ($createdAt) {
          return [
              'date' => $createdAt->toDateTimeString(),
              'timezone_type' => $createdAt->timezone_type,
              'timezone' => $createdAt->tzName,
          ];
        }),
   ];
}

Теперь он возвращает такой объект:

"createdAt": {
     "date": "2019-05-01 19:36:25",
     "timezone_type": 3,
     "timezone": "Asia/Baghdad"
},
"date": null

Критическое изменение задокументировано в официальной документации Carbon.

person user2682025    schedule 03.05.2019

Попробуйте вернуть углеродный экземпляр даты:

Carbon::parse($this->created_at)
person Johhn    schedule 02.05.2019
comment
возвращает строку too createdAt: 2019-05-01T16:36:25.000000Z - person user2682025; 03.05.2019