计算 UTC 中 momentjs 时间戳之间的持续时间

Calculate duration between momentjs timestamps in UTC

我很难计算两个时间戳的持续时间(时间差)。 我从服务器收到的时间戳格式如下:

start # => "2017-05-31 06:30:10 UTC" (这基本上是红宝石DateTime.now.utc

我想看看从那时到现在已经过去了多少小时。 计算仅在 angularjs 前端发生。 我尝试了以下方法:

var start = moment("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z").utc();
var now = moment.utc();
var duration = moment.duration(now.diff(start));
console.log(duration.asHours()); #=> 2 hours even though the point in time was just a couple of minutes ago.

不幸的是,这将始终使用我的设备本地时间并产生一个与实际时间相差几个小时的时间。

所以我的方法是要么将所有时间都转换为 UTC,然后让 momentjs 处理所有这些。

我错过了什么?

由于您的输入是 UTC,因此您可以使用 moment.utc 方法。

By default, moment parses and displays in local time.

If you want to parse or display a moment in UTC, you can use moment.utc() instead of moment().

这是一个活生生的例子:

var start = moment.utc("2017-05-31 06:30:10 UTC", "YYYY-MM-DD HH:mm:ss Z");
var now = moment.utc();
var duration = moment.duration(now.diff(start));
console.log(duration.asHours());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

在您的代码示例中,您将输入字符串解析为本地日期,然后将其转换为 UTC(使用 utc() 方法)。

请参阅 Local vs UTC vs Offset 指南以获取更多信息。