LoginSignup
9
4

[JavaScript]今日と一致する日付かどうかを判定する方法

Last updated at Posted at 2023-11-30

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()」

9
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4