JavaScriptの日付を比較します
-
16-09-2019 - |
質問
私は日付をこのようなものと比較しています:
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を使用して、日付の整数表現を取得し、比較します。