2012-04-04 76 views
15

我使用moments.js在javascript中處理日期。所有日期都是UTC(或應該是)。Moment.js在UTC日期差異

我有以下日期(從當前時間60分鐘):

//Wed, 04 Apr 2012 21:09:16 GMT 
to = moment.utc().add('m', 60).toDate(); 

現在,我想在此日期和當前UTC日期時間秒之間的區別,所以我做的:

seconds = moment.utc().diff(to, 'seconds'); 

這將返回10800而不是3600,所以3小時,而不是一個。

任何想法我做錯了什麼?

謝謝!

編輯:

我行更新到seconds = moment().diff(to, 'seconds');它得到確認當期秒,但它是-3600,而不是積極的。

編輯:

我現在有這兩個時刻對象:

{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true } 
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true } 

D1和D2。

當我做d1.diff(d2, 'hours', true);這將返回4。這絕對是與UTC我認爲,但似乎應該工作。

回答

0

由於您使用的是toDate(),因此可能會踢入時區。嘗試直接與時刻一起工作(即將其更改爲to = moment.utc().add('m', 60);)。

+0

嗯,那「到」真的是來自數據庫的一個值,即是使用上面的代碼創建的,所以我必須使用toDate()來存儲字符串。 – dzm 2012-04-04 21:30:13

+0

@Super我編輯了帖子。使用時間爲UTC的對象,得到類似的問題。 – dzm 2012-04-05 16:42:29

16

這是一個合法的錯誤。我只是在這裏提交它:https://github.com/timrwood/moment/issues/261

要解決它,請使用下面的代替。

var a = moment.utc().add('m', 60).toDate(), 
    b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc() 

另外,如果你需要獲得最新的toString,你可以使用moment().toString()爲其所代理的包裹Date().toString()

+7

僅供參考,在版本1.6.0中修復。 – timrwood 2012-05-02 19:52:25

+0

處理夏令時時,問題仍然存在。示例:2017年10月15日至2017年10月22日(UTC)之間的天數差異。第一次約會不在巴西夏令時,但第二次是。你上面建議的修復方法確實有效。 – Joaobrunoah 2017-10-17 12:56:08