プロが教えるわが家の防犯対策術!

日付の比較する関数でreturnの部分の上3つの出力結果は一見正しく見えるようなのですが正しくないそうです、最後の行が正しいそうです
その理由を説明お願いします


function isToday(date) {
const today = new Date();

return date.getTime() === today.getTime(); // ダメ
return date.getDate() === today.getDate(); // ダメ
return date.toUTCString() === today.toUTCString(); // ダメ
return date.toDateString() === today.toDateString(); // OK
}

const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);

const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);

console.log(isToday(new Date()));
console.log(isToday(tomorrow));
console.log(isToday(yesterday));

A 回答 (1件)

こんにちは



Dateオブジェクトは、基本的にミリ秒単位での値を保持しています。
「日付の比較」をしたいのなら、時刻以下の相違は無視するような判定が必要になります。

その点では、getTime()、toUTCString()は時刻以下も含むので適切ではありません。
一方で、getDate()は日にちだけの比較になるので、年、月が異なっていても同じと判断してしまいます。

ご提示のサンプルでは、1日ずらして比較していますけれど、1時間やひと月ずらして比較してみれば、違う結果が出ますので意味がわかると思います。
    • good
    • 1
この回答へのお礼

こんにちは
なるほどです!
言われてみれば上の二つは同じ日の違う時刻ならfalseになっちゃいますよね

ありがとうございました

お礼日時:2021/09/02 14:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!