2017-08-29 4 views
3

クロームの文字列「2000年度」のための有効な日付ではなく、無効な日付の文字列を「2000年度」の有効な日付を返します:https://jsfiddle.net/Lddr79ek/Chromeは他のブラウザでは正しく「無効な日付」</p> <p>フィドルリンク戻ってきている一方、代わりに無効な日付

コード:

function isDate(value) 
{ 
    return new Date(value).toString()!= "Invalid Date"); 
} 

これはChromeブラウザでは問題でしょうか?

編集 問題が報告されている動作は、クロームブラウザでのみ発生します。私はSOで他の答えをチェックしましたが、彼らはまたクロムで働いていません。

+0

短い答え:文字列に 'Date'を比較することにより、無効な日付をチェックしないでください。私はあなたのスニペットをEdge(現時点では私の現在のブラウザ)でチェックし、 'new Date()'と呼ばれるときに 'Date'オブジェクトを返しました。 –

+0

@Tim与えられた答えがクロムで機能しない – Kira

+0

次に、別のSOユーザがChromeで簡単に実行できるコードの例を_reproducible_与える必要があります。あなたの現在のアプローチは、任意のブラウザのAFAIKでは理想的ではないので、Chrome上では機能しません。 –

答えて

1

私はバグではないと思います。文字列を引数としてDateコンストラクタを呼び出すと、その文字列はDate.parseで解析されます。

そしてMDNは言う:Date.parseと

解析の文字列が強くにより、ブラウザの違いや矛盾に落胆しています。

しかしながら、ブラウザとの値に応じて、またはNaNをもたらさなくてもよいECMA-262によって定義されるような単純化さISO形式として認識されない日付列に無効な値が提供される:また、says

たとえば、:

現在のV8(Chrome)解析実装のように見えますが、何が渡されたかを推測します。

FYI:crbug上

+0

日付がNaNとして返されることはありません –

+1

@ ManojPilania - * Date.parse *の結果は、文字列が無効な日付であると判断されたNaNになります。 Dateコンストラクタで無効な日付文字列(「無効」が完全にパーサまで)が使用された場合、内部時刻値はNaNになり、* Date.prototype.toString *は「無効な日付」を返します。 – RobG

+0

"FY2017"、 "a1"のような文字列に対しては、crbug#126448が一部修正されているようです。文字列と数字部分の間にスペースがある場合、有効な日付とみなされます – Kira

1

Chromeは、入力文字列に数字のみを解析しています。

例:

new Date('AS 2017') //Year part is parsed. 
Sun Jan 01 2017 00:00:00 GMT+0300 

new Date('XCNCNNC 2017') //Year part is parsed. 
Sun Jan 01 2017 00:00:00 GMT+0300 

new Date('FY2017') //without space. Year is not parsed. 
Invalid Date 
関連する問題