Dateオブジェクトでは<
や>
などの比較演算子を使って日付を直接比較することができますが、一方で===
や==
での等値比較はできません。
今回は、今日と一致する日付かどうかを判定する方法を2つ紹介します。
判定したいDateオブジェクト
const date = new Date(); // 現在の日付と時刻を生成
const targetDate = new Date(2023, 10, 30); // 2023年11月30日0時0分を生成
前提として、判定したいのは「日付」のみであり、経過時刻は加味しないこととします。
方法①:.toDateString()
を使う 🌟おすすめ🌟
console.log(date.toDateString());
// => "Thu Nov 30 2023"
console.log(targetDate.toDateString());
// => "Thu Nov 30 2023"
console.log(date.toDateString() === targetDate.toDateString());
// => true
比較だけしたいのであれば、最もスマートなのでおすすめの方法です。
方法②:Dateオブジェクトの年・月・日を取得する
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const dateToStr = `${year}${month}${day}`;
console.log(dateToStr);
// => "20231130"
const targetYear = targetDate.getFullYear();
const targetMonth = targetDate.getMonth() + 1;
const targetDay = targetDate.getDate();
const targetDateToStr = `${targetYear}${targetMonth}${targetDay}`;
console.log(targetDateToStr);
// => "20231130"
console.log(dateToStr === targetDateToStr);
// => true
年・月・日の文字列を入れた変数を後のコードで使うなら、こちらの方法でも良いと思います。
補足: getTime()
について
「js 日付 一致」などの検索でよく出てくるgetTime()
ですが、今回のようにnew Date()
でDateオブジェクトを生成した場合、等値を判定するのは難しいです。
なぜなら、このメソッドによる返り値が1970年1月1日0時からの経過ミリ秒数であるためです。
そのため今回の条件では、以下のように等値比較はfalse
となります。
console.log(date.getTime());
// => 例) 1701054000000
console.log(targetDate.getTime());
// => 1701270000000
console.log(date.getTime() === targetDate.getTime());
// => false
参考記事
MDN Web Docs:「Date.prototype.toDateString()」
MDN Web Docs:「Date.prototype.getTime()」