1. ホーム
  2. javascript

[解決済み] JavaScriptの日付オブジェクトの比較

2023-02-22 23:57:25

質問

Javascriptで日付オブジェクトを比較する際、同じ日付を比較してもtrueが返らないことがあります。

 var startDate1 = new Date("02/10/2012");
 var startDate2 = new Date("01/10/2012");
 var startDate3 = new Date("01/10/2012");
 alert(startDate1>startDate2); // true
 alert(startDate2==startDate3); //false

これらの日付の等質性を比較するにはどうしたらよいでしょうか?私は、ネイティブの Date オブジェクトを利用することに興味があり、サードパーティライブラリは利用しません。

どのように解決するのですか?

それは、2番目のケースでは、実際の日付オブジェクトが比較され、2つのオブジェクトが互いに等しくなることはないからです。それらを数値に強制します。

 alert( +startDate2 == +startDate3 ); // true

より明確に数値に変換したい場合は、どちらかを使用します。

 alert( startDate2.getTime() == startDate3.getTime() ); // true

または

 alert( Number(startDate2) == Number(startDate3) ); // true

あ、仕様書への言及です。§11.9.3 抽象的な等価比較のアルゴリズム では、基本的にオブジェクトを比較するときに obj1 == obj2 は同じオブジェクトを参照している場合のみ真となり、それ以外の場合は偽となります。