JavaScript Date() オブジェクトのコンストラクターを介して無効な日付を渡すと、IE9 は有効な Date を作成しているように見えます。たとえば、"56 Aug 2009" は日付オブジェクト インスタンスを返します。対照的に、Chrome はそうではありません。
IE9 の Date オブジェクトに関する MSDN ドキュメント (以下のリンク) を読んで、次のような段落があります。
JavaScript は、日付形式に関してかなり柔軟です。2009 年 8 月 24 日、2009 年 8 月 24 日、 2009年 8 月 24 日などのバリアントを使用できます。詳細については、日付と時刻の文字列の書式設定 (JavaScript) を参照してください。
上記の段落から引用: http://msdn.microsoft.com/en-us/library/ee532932(v=vs.94).aspx
次のコード スニペットは、日付が有効かどうかを確認するために使用されます。Chrome では動作しますが、IE9 では動作しません:
function validateDate(d) {
var dt = new Date(d);
if (Object.prototype.toString.call(dt) !== "[object Date]") return false;
return !isNaN(dt.getTime());
}
このコードを実行すると:
console.log(new Date("56 Aug 2009"));
IE9 の結果
Fri Sep 25 00:00:00 UTC+0100 2009
クロムの結果
Invalid Date
より詳細な例を含む JsFiddle を次に示します。
この動作は予期しないものです (おそらく、間違った仮定や、気づかれないようになっている検証のバグが原因です!)。
日付が有効であることを確認し、IE9 で動作し、ネイティブ ブラウザー機能を使用できるようにする代替方法はありますか?