提问人:HenrijsS 提问时间:6/1/2020 更新时间:6/1/2020 访问量:2088
Laravel 的时间戳具有奇怪的返回格式
Laravel's timestamp has weird return format
问:
我有一个帖子模型和控制器,当我尝试获取所有帖子时,它会返回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": "[email protected]",
"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": "[email protected]",
"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"
}
]
答:
4赞
user2864740
6/1/2020
#1
这并不“奇怪”。这是非常标准的ISO8601格式,具有微秒精度和“Z”(即。UTC) 时区指定。ISO8601格式允许在日期和时间分量之间使用“T”,以及其他几种变体。
数据库显示恰好使用不同的变体。这是可以的,也是预期的,因为数据库类型是 DATETIME(或类似类型),因此显示的文本只是给定的表示形式。两种表示形式都表示相同的日期和时间^。
这是传输信息的良好格式(在 JSON 序列化中很常见),但不太适合向用户显示。
^ 假设数据库中的数据是从UTC源存储的,这里似乎是这种情况。如果它是本地时间源,则还有其他复杂情况,因为如果不进行值调整,JSON 中的“Z”偏移量将不正确/误导。
评论
1赞
user2864740
6/1/2020
JavaScript 的 Date.parse 将接受该格式。许多 JS 框架将包含日期/时间格式设置助手(请参阅特定的库支持)。我很幸运地使用了moment.js库,发现它很容易用于与人类可读值之间的转换。
0赞
user2864740
6/1/2020
或者,可以在 PHP 中将日期格式化为字符串,并将其添加到被序列化为 JSON 的对象中。将 PHP 的 strftime 视为一种方法。
1赞
HenrijsS
6/1/2020
谢谢@user2864740这就是我需要的!我认为应该对其进行编辑以回答我的问题。
评论