Laravel 的时间戳有奇怪的 return 格式
Laravel's timestamp has weird return format
我有一个模型和控制器帖子,当我尝试获取所有帖子时,returns 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);
}
这个问题在我制作的每个 model/migration 中都存在。包括用户 table.
"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 中一切正常:
这并不“奇怪”。这是非常标准的 ISO8601 format,具有微秒精度和“Z”(即 UTC)时区名称。 ISO8601 格式允许在日期和时间组件之间使用“T”,以及其他几种变体。
数据库显示恰好使用了不同的变体。这是正常的并且是预期的,因为数据库类型是 DATETIME(或类似的),所以显示的文本只是给定的表示形式。两种表示都代表相同的日期和时间^.
这是一种很好的格式来传输信息(在JSON序列化中很常见),不太适合向用户显示。
^ 假设数据库中的数据是从 UTC 源存储的,这里似乎就是这种情况。如果它是本地时间源,则存在其他复杂情况,因为 JSON 中的“Z”偏移量将是 incorrect/misleading,而没有值调整。
我有一个模型和控制器帖子,当我尝试获取所有帖子时,returns 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);
}
这个问题在我制作的每个 model/migration 中都存在。包括用户 table.
"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 中一切正常:
这并不“奇怪”。这是非常标准的 ISO8601 format,具有微秒精度和“Z”(即 UTC)时区名称。 ISO8601 格式允许在日期和时间组件之间使用“T”,以及其他几种变体。
数据库显示恰好使用了不同的变体。这是正常的并且是预期的,因为数据库类型是 DATETIME(或类似的),所以显示的文本只是给定的表示形式。两种表示都代表相同的日期和时间^.
这是一种很好的格式来传输信息(在JSON序列化中很常见),不太适合向用户显示。
^ 假设数据库中的数据是从 UTC 源存储的,这里似乎就是这种情况。如果它是本地时间源,则存在其他复杂情况,因为 JSON 中的“Z”偏移量将是 incorrect/misleading,而没有值调整。