4

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

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 )

これらの日付を比較して true を返すにはどうすればよいですか?

4

3 に答える 3

8

次のコードで問題が解決するはずです。

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

問題は、次のように書くときです。

(myDate == myOtherDate)

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

getTime解決策は、Date オブジェクトを表す数値を取得するために使用し (getTimeエポック時間からのミリ秒数を返すため、この数値は Date オブジェクトの正確な表現になります)、この数値を比較に使用します (数値の比較は機能します)。予想通り)。

于 2009-07-18T00:02:59.923 に答える
3

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

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

    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ループコード(「Delaycode-start」で識別)を保持すると、コンソールに「false」が表示され、forループコードを削除すると、どちらの場合もmyDateが7/17であっても、コンソールは「true」をログに記録します。 /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」を出力します。

于 2009-07-18T00:22:35.523 に答える
0
=> (myDate.getTime() == myOtherDate.getTime())

(myDate == myOtherDate)は機能せず、2 つのオブジェクト (ポインター) を、それらに含まれる値ではなく比較します。getTime を使用して Date の整数表現を取得し、比較します。

于 2013-03-01T10:01:46.810 に答える