【发布时间】:2019-09-07 06:53:38
【问题描述】:
我使用 laravel 5.7 作为 api 和 vue 作为前端。在 api 响应中,我将用户最后一次看到的时间戳记为 last_seen: "2019-04-17 05:20:37",默认情况下为 UTC 格式。
Laravel API 代码:
$user_details = array(
'user_id' => $userId,
'name' => $userDetails->name,
'email' => $userDetails->email,
'phone' => $userDetails->contact,
'account_creation_date' => $userDetails->created_at->toDateTimeString(),
'last_seen' => $lastSeen != null ? $lastSeen->toDateTimeString() : $userDetails->last_login->toDateTimeString(),
'language' => 'English',
'country' => $country->name
);
$user_profile['user_details'] = $user_details;
return response()->api(true, 'Success', $user_profile);
在前端,即在 vue 中,我使用 Dayjs Package 显示用户的最后一次显示为 [Day|Hours|Minutes] ago,但问题是 目标用户刚刚登录,但我知道它正在显示6 Hours ago
由于我在 Asia/Kolkata 时区,因此代码也需要 5.5/6 小时。
我也尝试使用moment.js,但我得到undefined function moment.tz.guess() 错误
这是我迄今为止尝试过的:
我将日期时间字符串传递给我的 vuejs 函数:
import dayjs from "dayjs";
convertFromNow(date) {
return dayjs(date).fromNow();
},
然后调用这个方法打印为1 minute ago。
<div class="side-box mt-4">
<h2 class="side-head">
<i class="fa fa-clock-o" />
{{ convertFromNow(userInfo.user_details.last_seen) }}
<h6 class="text-gray">
Last seen
</h6>
</h2>
</div>
我需要的预期结果是,无论 UTC 时间是多少,我都应该根据我的时区获得用户的最后一次访问。
【问题讨论】:
-
使用moment.js有什么问题?这是一个很棒的图书馆。
-
@iwaduarte 使用
moment.js没有问题,但我在猜测用户的时区时出错。 -
另请参阅此链接以了解您的代码发生了什么。 github.com/moment/moment-timezone/issues/523 。您能否也编辑您的问题以包含您在 moment.js 中使用的代码?
-
为什么您的 API 返回的日期/时间字符串没有时区信息?恕我直言,日期的最佳传输格式是 ISO 8601,即
2019-04-17T05:20:37Z。这使它明确并且JS可以正确解析它。在我的浏览器中,解析您的"2019-04-17 05:20:37"字符串会将其视为当地时间(这似乎是您的问题) -
您可以使用
toLocaleString()获取用户当前时间
标签: javascript laravel vue.js npm