28

私は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 

アイデア?

4

2 に答える 2

62

ドキュメント(および簡単なテスト) に基づいて、moment.js は日付オブジェクトのラッパーを作成します。ステートメント:

var now = moment();

によって作成されたかのように作成された新しい Date オブジェクトを中心に持つ「瞬間」オブジェクトを作成しますnew Date()。したがって、時間、分、秒は現在の時刻に設定されます。

ステートメント:

var releaseDate = moment("2012-09-25");

new Date(2012, 8, 25)ローカル タイム ゾーンの時間、分、秒がすべてゼロに設定されるかのように作成された新しい Date オブジェクトを中心に持つ moment オブジェクトを作成します。

moment.diff2 つの日付のミリ秒単位で丸められた差に基づく値を返します。完全な値を表示するにはtrue、3 番目のパラメーターとして渡します。

 now.diff(releaseDate, 'days', true)
 ------------------------------^

now.diff(releaseDate, 'days')そのため、同じローカル日付で実行された場合でも、コードが実行される時刻とローカル タイム ゾーンが 0 であるか 1 であるかによって異なります。

日付だけを比較したい場合は、次を使用します。

var now = moment().startOf('day'); 

これにより、時刻がローカル タイム ゾーンの 00:00:00 に設定されます。

于 2012-09-26T02:55:13.270 に答える
3

RobGの答えは質問に対して正しいので、この答えはmomentjsで日付を比較する方法を探している人のためのものです。

上記のように startOf('day') を使用しようとしました:

var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');

これは私にはうまくいきませんでした。

isSameを使用する必要がありました:

var compare = moment(dateA).isSame(dateB, 'day');
于 2014-01-18T21:14:29.237 に答える