首页 > 解决方案 > 升级到 Laravel 5.8 后如何修复 Carbon 时区

问题描述

升级到 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": "Asia/Baghdad" }

我确实在网上浏览了一下,没有发现任何关于它的信息,升级指南中也没有关于它的信息。我从资源中返回它,就像 JSON 一样:

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

标签: phplaravelphp-carbonlaravel-5.8

解决方案


这就是我可以解决的方法:

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 文档中。


推荐阅读