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
?
- Ash は
Date.parse
日付文字列の解析を推奨しており、これにより日付文字列が有効かどうかを確認する信頼できる方法が提供されます。 - 可能であれば、API で Date インスタンスを受け入れ、それが有効かどうかを確認/アサートできるようにしたいです。Borgar のソリューションはそれを実現しますが、ブラウザー間でテストする必要があります。もっとエレガントな方法があるかどうかも気になります。
- Ash のおかげで、API が
Date
インスタンスをまったく受け入れないようにすることを検討できました。これが検証の最も簡単な方法です。 - Borgarは、インスタンスをテストしてから
Date
、Date
の時刻値をテストすることを提案しました。日付が無効な場合、時刻値は ですNaN
。私は次のように確認しました。ECMA-262この動作は標準であり、まさに私が求めていたものです。
ベストアンサー1
私ならこうします:
if (Object.prototype.toString.call(d) === "[object Date]") {
// it is a date
if (isNaN(d)) { // d.getTime() or d.valueOf() will also work
// date object is not valid
} else {
// date object is valid
}
} else {
// not a date object
}
更新 [2018-05-31] : 他の JS コンテキスト (外部ウィンドウ、フレーム、または iframe) からの Date オブジェクトを気にしない場合は、このより単純な形式の方が適している可能性があります。
function isValidDate(d) {
return d instanceof Date && !isNaN(d);
}
更新 [2021-02-01]2013-13-32
: 「無効な日付」( ) と「無効な日付オブジェクト」( )には根本的な違いがあることに注意してくださいnew Date('foo')
。この回答は、日付入力の検証については扱っておらず、Date インスタンスが有効な場合のみを扱っています。