2

我有一个帖子模型和控制器,当我尝试获取所有帖子时,它返回 created_at 和 updated_at 列,如下所示: "created_at": "2020-05-31T22:04:38.000000Z",

如您所见,日期和时间之间有一个奇怪的“T”+末尾有“.000000Z”。

我尝试使用Carbon::setToStringFormat();但没有运气。

这是我的 PostsController@index

    {
        Carbon::setToStringFormat(DateTime::ISO8601);
        $posts = Post::with('author:id,name,lastName')->get();
        return response()->json(['posts' => $posts->toArray()],200);
    }

这个问题在我所做的每一个模型/迁移中都存在。包括用户表。

"users": [
    {
      "id": 1,
      "email": "admin@test.com",
      "status": "admin",
      "name": "Administrators",
      "lastName": "Uzvārds",
      "department": "client",
      "phone": "null",
      "created_at": "2020-05-31T22:03:36.000000Z",
      "updated_at": "2020-05-31T22:03:36.000000Z"
    },
    {
      "id": 2,
      "email": "user@test.com",
      "status": "employee",
      "name": "Darbinieks",
      "lastName": "Uzvārds",
      "department": "client",
      "phone": "null",
      "created_at": "2020-05-31T22:03:36.000000Z",
      "updated_at": "2020-05-31T22:03:36.000000Z"
    }
  ]

如您所见,在 PHPMyAdmin 中一切都很好: 在此处输入图像描述

4

1 回答 1

3

这并不“奇怪”。这是非常标准的ISO8601 格式,具有微秒精度和“Z”(即 UTC)时区名称。ISO8601 格式允许在日期和时间组件之间使用“T”,以及其他几种变体。

数据库显示碰巧使用了不同的变体。这是可以的,也是预期的,因为数据库类型是 DATETIME(或类似的),所以显示的文本只是给定的表示。两种表示都代表相同的日期和时间^。

这是传输信息的格式(在 JSON 序列化中很常见),不太适合向用户显示。

^ 假设数据库中的数据是从 UTC 源存储的,这里似乎就是这种情况。如果它是本地时间源,则会出现其他复杂情况,因为如果没有值调整,JSON 中的“Z”偏移量将不正确/具有误导性。

于 2020-05-31T22:25:17.520 回答