JavaScriptのDateクラスはインスタンス化時に指定した引数が不正な場合、Invalid Date
という Date型の値を返します。
不正な日付を指定した場合const d = new Date('aaa');
// d is Invalid Date
このときのd
はDateクラスのインスタンスであるのは変わらないので、次のコードはすべてtrue
になります。
不正な日付を指定した場合const d = new Date('aaa');
// d is Invalid Date
typeof d === 'object' // true
d instanceof Date // true
JavaScriptではInvalid Date
を判定する関数やInvalid Date
を表す値などは用意されていません。
Invalid Date
かどうかを直接判定する方法が無いので、別の方法で判定する必要があります。
DateクラスのgetTime()
関数は、Invalid Date
時にNaN
を返します。
getTime()const d1 = new Date('2020-10-10');
d1.getTime() // 1602288000000
const d2 = new Date('aaa');
d2.getTime() // NaN
これを利用して、次のようにInvalid Date
かを判定する関数が実装できます。
isInvalidDate.jsconst isInvalidDate = (date) => Number.isNaN(date.getDate());
これで、Date
クラスのインスタンスが Invalid Date
かを判定することができます。
さまざまな Invalid Date 判定とNode.js、各種ブラウザでのベンチマークを併せて説明されている記事です: