2012-04-04 23 views
15

javascript ile çalışmak için moments.js kullanıyorum. Tüm tarihler UTC (veya olmalıdır).Moment.js, UTC tarihleri ​​arasındaki farkı

Ben şu tarihi (şimdiki zamandan 60 dakika):

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

Şimdi bu tarih ve geçerli UTC datetime arasındaki saniye farkını almak istiyorum, bu yüzden yapın:

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

Bu, 3600 yerine 10800 değerini döndürür; bu nedenle, bir yerine 3 saat.

Ne yaptığım hakkında bir fikrim var mı?

Teşekkür ederiz!

DÜZENLEME:

Ben seconds = moment().diff(to, 'seconds'); hattı güncellenmiş ve currect saniye alır, ama olumlu yerine -3600 bu.

DÜZENLEME:

Şimdi sahip bu iki an nesneleri:

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

d1 ve d2.

d1.diff(d2, 'hours', true);'u yaptığımda, 4 döndürür. Kesinlikle UTC ile bir şey olduğunu düşünüyorum, ama bu çalışması gerekir.

cevap

0

toDate() kullanıyor olduğunuz için zaman dilimlerinin tekilleşmesi olabilir. Sadece anı ile doğrudan çalışmayı deneyin (yani to = moment.utc().add('m', 60);'a değiştirin).

+0

Hm proxy'lerinin bu kadar

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

Ayrıca, sen moment().toString() kullanabilirsiniz 'ile' veritabanından gelen bir değer olduğunu, gerçekten Yukarıdaki kodu kullanarak oluşturuldu, bu yüzden depolamak için dize almak için toDate() kullanmanız gerekir. – dzm

+0

@Super Yayını düzenledim. UTC olan moment nesneleriyle çalışmak, benzer sorunları ele almak. – dzm

16

Bu yasal bir hatadır. Ben sadece buraya yazdım: https://github.com/timrwood/moment/issues/261 Etrafında gezinmek için aşağıdakileri kullanın. Eğer tarih toString almak gerekiyorsa o sarılmış Date().toString()

+7

Sadece FYI, bu 1.6.0 sürümünde düzeltildi. – timrwood

+0

Yaz Saati ile uğraşırken hata hala var. Örnek: 15/10/2017 ve 22/10/2017 (UTC) arasındaki günlerde fark. İlk tarih Brezilya Yaz Dönemi'nde değil, ikincisi. Yukarıda önerdiğiniz düzeltme hile yaptı. – Joaobrunoah

İlgili konular