2017-05-31 115 views
0

我很難計算兩個時間戳的持續時間(時間差)。 有一個時間戳我從服務器接收的格式如下:計算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處理所有這些。

我錯過了什麼?

回答

1

由於您輸入的是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 –