2017-03-27 21 views
-1

私は多くの "日付"に対処する必要があるプロジェクトに取り組んでいます。私は時々Javascriptを別のブラウザでは動作が異なりますことに気づく:javascriptはさまざまなブラウザで異なる動作をします

コード:

new Date("Mar 30, 2017".replace(',', '').replace(/ /g, '/')) 

私は私が日付を作成するためにreplaceを使用する必要はありません知っているが、このコードは私のChromeとSafariのから興味深い異なる結果を与えます。

私が実行している間:

"Mar 30, 2017".replace(',', '').replace(/ /g, '/') 

両方ChromeとSafariの意志は私に与えます:"Mar/30/2017"を。しかし、私はDateオブジェクトに結果をオンしようとすると、興味深い結果は次のようになります。

Chrome: Thu Mar 30 2017 00:00:00 GMT-0700 (PDT) 
Firefox: Date 2017-03-30T07:00:00.000Z 
Safari: Invalid Date 

私はすでに両方のブラウザのJavascriptのバージョンをチェックして、彼らは同じバージョン(1.7)を使用しています。この点に関してChromeがSafariと異なる動作をする理由を誰でも説明できますか?

UPDATE 私は"Mar/30/2017"は、有効な日付フォーマットではありません知っています。しかし、私の質問はで、JavaScriptは異なるブラウザで異なる動作をします。私の日付フォーマットについて不平を言っているそれらの答えのために。それに答える前に質問をお読みください。私は@Felix Klingの答えを取って、すべての答えにすべて同じことに感謝します。

+1

はい、非標準の日付書式を 'new Date()'に渡すと、さまざまな結果が得られます。可能であれば、[標準形式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)を渡すか、文字列を完全に渡さないようにしてください。 – JJJ

+0

SafariのJS実装では理解できないかもしれませんが、最初に「Mar/30/2017」という日付を作成する必要があります。[w3 date docs](https://www.w3schools.com) /jsref/jsref_obj_date.asp) –

+2

'' Mar/30/2017 "'は、私が知っているどの仕様書でも有効な日付形式ではありません。ブラウザーは、あなたがここで見ることができるように、彼らが望むように、あるいはまったく解釈しないかもしれません。 – Timo

答えて

0

この点でChromeがSafariと異なる動作をする理由を説明できる人はいますか?

specificationは、未知の日付フォーマットを処理することは、実装依存であると述べている:

[...]文字列は、他のいくつかの時点で現地時間、UTC時間、または時間と解釈することができますゾーンの内容は、Stringの内容によって異なります。この関数は、Date Time String Format(20.3.1.16)で呼び出された規則(拡張年を含む)に従って、Stringの書式を最初に解析しようとします。 Stringがその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式に戻ります。 [...]

SafariとChromeは異なるJavaScriptエンジンを使用しているため、その場合の動作は異なる場合があります。

関連する問題