2012-04-04 64 views
15

私はmoments.jsを使用しています。すべての日付は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'); 

3600の代わりに10800が返されるため、1時間ではなく3時間です。

私が間違っていることは何ですか?

ありがとうございました!

EDIT:

私はseconds = moment().diff(to, 'seconds');に行を更新し、それがcurrect秒を取得しますが、それは-3600の代わりに、正のです。

EDIT:

私が今持っているこれらの二つのモーメントはオブジェクト:

{ _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

フムにプロキシとして

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

また、あなたがいることを、実際にデータベースからの値である「から」という、moment().toString()を使用することができます上記のコードを使用して作成されたので、toDate()を使用して格納する文字列を取得する必要があります。 – dzm

+0

@スーパー私は投稿を編集しました。 UTCのモーメントオブジェクトで作業することで、同様の問題が発生します。 – dzm

16

これは正当なバグです。私はちょうどここにそれを提出した:https://github.com/timrwood/moment/issues/261

それを回避するには、代わりに次のように使用します。日付のtoStringを取得する必要がある場合、それはラップDate().toString()

+7

これはバージョン1.6.0で修正されました。 – timrwood

+0

サマータイムを扱うときにバグが残っています。例:15/10/2017から22/21/2017までの日数の差(UTC)。最初の日付はブラジルの夏時間ではありませんが、2番目の日付はブラジルの夏時間です。あなたが上で提案した修正はそのトリックでした。 – Joaobrunoah

関連する問題