1. ホーム
  2. javascript

[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する

2022-02-15 03:19:45

質問

JSで有効な日付オブジェクトと無効な日付オブジェクトを区別したいのですが、その方法が分かりませんでした。

var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'

を書くためのアイデアがあれば教えてください。 isValidDate 関数を使用することができます。

  • アッシュ推奨 Date.parse これは、日付文字列が有効かどうかを確認するための信頼できる方法です。
  • 可能であれば、APIがDateインスタンスを受け取り、それが有効かどうかをチェック/アサートできることが望ましい。Borgarのソリューションはそれを行うが、私はブラウザ間でそれをテストする必要があります。私はまた、よりエレガントな方法があるかどうか疑問に思っています。
  • アッシュは、私のAPIが以下のものを受け入れないようにすることを検討させました。 Date インスタンスの検証を容易にするためです。
  • をテストするようBorgarから提案されました。 Date のインスタンスをテストし、次に Date の時間値です。日付が無効な場合、時刻の値は NaN . で確認したところ ECMA-262 で、この動作は標準にあるもので、まさに私が求めているものです。

どのように解決するのですか?

私ならこうします。

if (Object.prototype.toString.call(d) === "[object Date]") {
  // it is a date
  if (isNaN(d.getTime())) {  // d.valueOf() could also work
    // date is not valid
  } else {
    // date is valid
  }
} else {
  // not a date
}

更新情報[2018-05-31]を掲載しました。 : 他のJSコンテキスト(外部ウィンドウ、フレーム、またはiframe)からのDateオブジェクトに関心がない場合、このシンプルなフォームが好まれるかもしれません。

function isValidDate(d) {
  return d instanceof Date && !isNaN(d);
}