Laravel 的时间戳有奇怪的返回格式
Posted
技术标签:
【中文标题】Laravel 的时间戳有奇怪的返回格式【英文标题】:Laravel's timestamp has weird return format 【发布时间】:2020-09-19 05:15:49 【问题描述】:我有一个帖子模型和控制器,当我尝试获取所有帖子时,它返回 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 表。
"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 中一切正常:
【问题讨论】:
相关,部分 - ***.com/q/8405087/2864740 【参考方案1】:这并不“奇怪”。这是相当标准的ISO8601 format,具有微秒精度和“Z”(即 UTC)时区名称。 ISO8601 格式允许在日期和时间组件之间使用“T”,以及其他几种变体。
数据库显示碰巧使用了不同的变体。这是可以的,也是预期的,因为数据库类型是 DATETIME(或类似的),所以显示的文本只是给定的表示。两种表示都代表相同的日期和时间^。
这是一种良好的信息传输格式(在 JSON 序列化中很常见),不太适合向用户显示。
^ 假设数据库中的数据是从 UTC 源存储的,这里似乎就是这种情况。如果它是本地时间源,则会出现其他复杂情况,因为如果不调整值,JSON 中的“Z”偏移量将不正确/具有误导性。
【讨论】:
javascript 的 Date.parse 将接受该格式。许多 JS 框架将包含日期/时间格式化助手(请参阅特定库支持)。 moment.js library 我很幸运,发现它很容易用于与人类可读值的转换。 另外,可以在 PHP 中将日期格式化为 string,并将其添加到序列化为 JSON 的对象中。请参阅PHP’s strftime 作为一种方法。 谢谢@user2864740 这正是我所需要的!我认为应该对其进行编辑以回答我的问题。以上是关于Laravel 的时间戳有奇怪的返回格式的主要内容,如果未能解决你的问题,请参考以下文章