计算UTC中时刻js时间戳之间的时间间隔

问题描述:

我很难计算两个时间戳的持续时间(时间差)。 有一个时间戳我从服务器接收的格式如下:计算UTC中时刻js时间戳之间的时间间隔

start # => "2017-05-31 06:30:10 UTC" (这基本上是RUBYS 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方法。

默认情况下,矩解析并显示在本地时间。

如果要分析或显示UTC的时刻,可以使用moment.utc()而不是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指南获取更多信息。

+0

非常感谢! 我把你引用的文档理解为“可选地,你也可以这样写”。显然我错了,p –