問題

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のソリューションはそれを行いますが、ブラウザ間でテストする必要があります。私はまた、よりエレガントな方法があるのだろうかと思います。
  • Ashは私の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コンテキスト(外部ウィンドウ、フレーム、またはiframes)のDateオブジェクトに関心がない場合、この簡単なフォームが優先されます。

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

  同じタグがついた質問を見る

javascriptdate