私は moment.js 1.7.0を使用して今日の日付を別の日付と比較しようとしていますが、diff
関数が何らかの理由で1日離れていると言っています。
コード:
var releaseDate = moment("2012-09-25");
var now = moment(); //Today is 2012-09-25, same as releaseDate
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD"));
console.log("NOW: " + now.format("YYYY-MM-DD"));
console.log("DIFF: " + now.diff(releaseDate, 'days'));
コンソール:
RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1
アイデア?
documentation (および簡単なテスト)に基づいて、moment.jsは日付オブジェクトのラッパーを作成します。ステートメント:
_var now = moment();
_
new Date()
のように作成された新しいDateオブジェクトを中心に持つ「モーメント」オブジェクトを作成するため、時間、分、秒が現在の時刻に設定されます。
ステートメント:
_var releaseDate = moment("2012-09-25");
_
new Date(2012, 8, 25)
のように作成された新しいDateオブジェクトを中心に持つモーメントオブジェクトを作成します。この場合、ローカルタイムゾーンの時間、分、秒はすべてゼロに設定されます。
_moment.diff
_は、2つの日付間のミリ秒単位の丸め差に基づいて値を返します。完全な値を表示するには、3番目のパラメーターとしてtrue
を渡します。
_ now.diff(releaseDate, 'days', true)
------------------------------^
_
そのため、同じローカル日付で実行された場合でも、コードが実行される時刻とnow.diff(releaseDate, 'days')
がゼロか1かどうかのローカルタイムゾーンに依存します。
日付だけを比較したい場合は、次を使用します。
_var now = moment().startOf('day');
_
これにより、ローカルタイムゾーンで時刻が00:00:00に設定されます。
RobGの答えは質問に対して正しいので、この答えはmomentjsで日付を比較する方法を検索する人のためのものです。
上記のようにstartOf( 'day')を使用しようとしました:
var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');
これは私にはうまくいきませんでした。
私は isSame を使わなければなりませんでした:
var compare = moment(dateA).isSame(dateB, 'day');