web-dev-qa-db-ja.com

UTC日付間のMoment.js差分

Javascriptで日付を操作するために moments.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_が返されるため、1時間ではなく3時間になります。

私が間違っていることについて何か考えはありますか?

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

編集:

行をseconds = moment().diff(to, 'seconds');に更新すると、正しい秒数が取得されますが、正ではなく_-3600_です。

編集:

これで、次の2つのモーメントオブジェクトができました。

_{ _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と関係があると思いますが、これは動作するはずです

16
dzm

これは正当なバグです。ここに提出しました: 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()を使用できます。

17
timrwood

toDate()を使用しているため、タイムゾーンが開始されている可能性があります。瞬間を直接操作するようにしてください(つまり、to = moment.utc().add('m', 60);に変更します)。

0
Supr