2017-01-31 5 views
1

JavaScriptが有効な日付をに与える理由を理解できません1 dec日付が無効です。この動作は特定の理由で言語に組み込まれていますか?それは私のユースケースのために無効な日付 新しい日付のすべての(「2017年11月31日」)有効期限がinvalida日付のJavaScriptの出力から来ています

+0

私は、Dateコンストラクタパーサーのすべてのルールと例外を学ぶことはできませんでした。あなたはいつもそれがアメリカの形式の日付を拒絶すべきであると確信していますか? –

+0

http://stackoverflow.com/questions/8098202/javascript-detecting-valid-dates – msg

答えて

1

まずなければならないため、Date constructorは、入力を検証するために設計されていない、あるいは好き嫌いします。逆に、明示的にこのような創造的なルールで、任意のコストでインスタンスを作成するために設計されています:

値がその論理的範囲よりも大きい場合は日付が、複数の引数を持つコンストラクタと呼ばれている

(例えば13が月値 または分値70の場合)、隣接値は に調整されます。例えば。あなたは本当にあなたがどこかに見て必要な日数を検証する必要がある場合は、新しいDate(2013、13は、1)だから、新しい 日(2014、1、1)

に相当します。約11/31/2017として

、コンストラクタは、この期待:日付を表す

文字列値。文字列は、Date.parse()メソッド(IETF-compliant RFC 2822 timestampsおよびISO8601のバージョン)で認識される形式 である必要があります。

...よく見えます。しかし、これは次の(強調鉱山):Dateコンストラクタ(メソッドとDate.parse、 彼らは等価である)と日付文字列の

解析強くによるブラウザ 違いや矛盾に落胆しています。

そして、我々はDate.parse()ドキュメントに掘る場合、我々は最終的にこれを読んで:

ECMAScript仕様の状態を:文字列は、標準フォーマット に準拠していない場合は関数がどの インプリメンテーションにフォールバックします特定のヒューリスティックスまたは実装固有の解析 アルゴリズム。 ISO形式の文字列で不正な要素 の値を含む認識できない文字列または日付は、Date.parse()が NaNを返すようにします。

しかし、日付文字列に無効な値はECMA-262で定義されたISO形式 として認識されていないが、または、例えば、提供 ブラウザと値によっては、NaNが得られない場合があります。

// Non-ISO string with invalid date values 
new Date('23/25/2014'); 

ますSafariの7

でのFirefox 30と 無効な日付で2015年11月25日の現地日付として扱われ、このフォールバックケースは、あなたの日付はに落ちたものです。

関連する問題