JavaScriptのnew Date
で日付の生成に失敗するとInvalid Date
という値を返します。
new Date
の結果がInvalid Date
かどうかを判定する方法をまとめました。
Invalid Dateの判定はできない
JavaScriptではInvalid Date
を表す値やInvalid Date
を判定する関数が公式に存在しないため
new Dateの戻り値がInvalid Dateであることを直接的に判定することができません。
const invalidDate = new Date("invalidDate");
console.log(invalidDate) // Invalid Date
console.log(invalidDate instanceof Date) // true
console.log(invalidDate instanceof Object) // true
console.log(invalidDate === null) // false
console.log(invalidDate === undefined) // false
console.log(new Date("hoge") === invalidDate) // false
new DateがInvalid Dateを返すときは例外も発生しません。
try {
const invalidDate = new Date("invalidDate");
console.log(invalidDate)
} catch (e) {
console.log("例外発生")
}
// Invalid Date
Invalid Dateとは
上記のコードでもわかる通りInvalid DateはnullやundefinedでもなければErrorでもないのです。
Invalid DateはDateクラスのオブジェクトなのです。
存在しない日付や日付に変換できない値でDateオブジェクトを生成するとInvalid Dateになります。
// 存在しない日付
const notexistsDate = new Date("2023/99/99");
console.log(notexistsDate) // Invalid Date
// 日付に変換できない値
const invalidDate = new Date("invalidDate");
console.log(invalidDate) // Invalid Date
Invalid Dateを判定する方法
公式にInvalid Dateを判定する方法がないなら自作するまでです。
1. Invalid Dateを文字列にして比較
const invalidDate = new Date("invalidDate");
if (invalidDate.toString() === "Invalid Date") {
// Invalid Date時の処理
}
Dateオブジェクトを文字列にしてInvalid Dateかどうかを判定しています。
2. Number.isNaNで判定
// Invalid Dateかどうかを判定するメソッド
const isInvalidDate = (date) => Number.isNaN(date.getTime());
const invalidDate = new Date("invalidDate");
if (isInvalidDate(invalidDate)) {
// Invalid Date時の処理
}
getTime()関数はDateオブジェクトを数値に変換しますが、できないときはNaNという値を返します。
数値かNaNをNumber.isNaN()に渡すことでInvalid Dateかどうかを判定しています。
つまりDateオブジェクトが数値ならfalseを、Invalid Dateならtrueを返すメソッドを用意しています。
コメント