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と関係があると思いますが、これは動作するはずです。
これは正当なバグです。ここに提出しました: 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()
を使用できます。
toDate()
を使用しているため、タイムゾーンが開始されている可能性があります。瞬間を直接操作するようにしてください(つまり、to = moment.utc().add('m', 60);
に変更します)。