lollipop.onl

JavaScriptのDateクラスが Invalid Date かどうか判定する

JavaScript
更新日:

Invalid Date とはなにか

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

Invalid Date を判定する

JavaScriptではInvalid Dateを判定する関数やInvalid Dateを表す値などは用意されていません。
Invalid Dateかどうかを直接判定する方法が無いので、別の方法で判定する必要があります。

Date.getTime() の返り値を使用する

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 かを判定する関数

これを利用して、次のようにInvalid Dateかを判定する関数が実装できます。

isInvalidDate.jsconst isInvalidDate = (date) => Number.isNaN(date.getDate());

これで、Dateクラスのインスタンスが Invalid Date かを判定することができます。

参考

Stack Overflow Detecting an "invalid date" Date instance in JavaScript https://stackoverflow.com/questions/1353684/detecting-an-invalid-date-date-instance-in-javascript

さまざまな Invalid Date 判定とNode.js、各種ブラウザでのベンチマークを併せて説明されている記事です:

Qiita JavaScript (node.js/chrome/firefox) で Invalid Date を判定する - Qiita https://qiita.com/muddydixon/items/2edf6dcb84295eccf4f3

編集