質問

私は日付をこのようなものと比較しています:

var dt = new Date();    

dt.setDate("17");               
dt.setMonth(06); 
dt.setYear("2009");

var date = new Date();

console.log("dt(%s) == date(%s) == (%s)", dt, date, (dt == date) );

if( now == dt ) {
    ....
}

もちろん、文字列値は動的です。

ログに私が見る:

dt(Fri Jul 17 2009 18:36:56 GMT-0500 (CST)) == date(Fri Jul 17 2009 18:36:56 GMT-0500 (CST) == (false)

私は.equals()を試しましたが、それは機能しませんでした(私はJavaScriptのJava部分を試していました:P)

これらの日付をどのように比較して、それらが真実を返すことができますか?

役に立ちましたか?

解決

次のコードは問題を解決する必要があります。

(myDate.getTime() == myOtherDate.getTime())

問題は、あなたが書くとき:

(myDate == myOtherDate)

...あなたは実際に尋ねています myDate 同じオブジェクトを指しています myOtherDate 指しているのですか?」、そうではありません myDate と同じ myOtherDate?".

解決策は使用することです getTime 日付オブジェクトを表す数値を取得するには(そしてそれ以降 getTime エポック時代からミリ秒数を返します、この数は ちょうど 日付オブジェクトの表現)と比較のためにこの番号を使用します(数値を比較すると、予想どおりに機能します)。

スティーブ

他のヒント

コードの問題は、日付のみではなく時間/日付の部分を比較していることです。

このコードを試してください:

    var myDate = new Date();
    myDate.setDate(17);
    myDate.setMonth(7);
    myDate.setYear(2009);

    //Delay code - start
    var total = 0;
    for(var i=0; i<10000;i++)
        total += i;
    //Delay code - end

    var now = new Date();

    console.log(now.getTime() == myDate.getTime());

forループコード(「遅延コード - スタート」で識別)を保持すると、コンソールは「false」を表示し、forループコードを削除すると、両方の場合でもコンソールは「真」を記録します。 /2009および「Now」は2009年7月17日です。

問題は、JavaScriptの日付オブジェクトが両方の日付を保存することです と時間. 。日付パーツのみを比較する場合は、コードを書く必要があります。

function areDatesEqual(date1, date2)
{
    return date1.getFullYear() == date2.getFullYear() 
            && date1.getMonth() == date2.getMonth()
            && date1.getDate() == date2.getDate();
}

この関数は、2つのJavaScript「日付部分」が関連する時間部分を無視している場合、「true」を印刷します。

=> (myDate.getTime() == myOtherDate.getTime())

(myDate == myOtherDate) 機能しません。含む値の代わりに、2つのオブジェクト(ポインター)を比較します。 GetTimeを使用して、日付の整数表現を取得し、比較します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top