Dateオブジェクトに変換して有効かどうか判断する
例
var date = new Date("2000-10-40"); // 40日は存在しない
console.log(isNaN(date.getDate()));
// true
解説
- 日付をDateオブジェクトに変換する。
- getDateメソッドで日付の情報を取得する。
- getDateメソッドは有効でない日付だとNaNを返す。
- それを
isNaN
で判断する。(isNaN()
関数は引数がNaN
かどうかを判定します)
※ yyyyMMdd
の形式の日付は、Dateオブジェクトへの変換がうまくいかず、正しい日付でも有効でない日付と判断されることがあります。形式を変換してから行う必要があります。
処理速度
isNaN(new Date())
のように、Dateオブジェクトを直接isNaNで判定することができますが、getDateを判定させた方が高速になるケースが多いらしいです。
Invalid Dateで判断すれば良いのではないか?
有効ではない日付をnew Dateに渡すとInvalid DateというDateオブジェクトが返されます。
toString()
を使って Invalid Date
かどうかを判断する方法もあります。
必ず Invalid Date
の文字列を返す実装の場合はそれでもよいのですが、必ず Invalid Date
の文字列を返すとは限らない実装の場合は isNaN()
で判定をしましょう。
参考にした記事
https://ribbit.konomi.app/blog/javascript-check-date-one-liner/