2015-10-14 4 views
5

奇妙なことに、別のブラウザでは新しいDate()の結果が異なります。クローム45.0.2454.101メートルで新しい日付()はChromeまたはFirefoxで異なる結果を表示します

のFirefoxで
new Date(2015,9,1) 
Thu Oct 01 2015 00:00:00 GMT+0200 (W. Europe Daylight Time) 

40.0.3(デフォルトインスペクタ/コンソール)

new Date(2015,9,1) 
Date 2015-09-30T22:00:00.000Z 

追加情報
私がしようとした場合FIREBUG拡張のコンソールを備えたFirefoxは、Chromeのようにうまく機能します。 何が起こっているのですか? Firefoxはオフセットをカウントしているようだが、実際には正しい日付の2時間遅れている。 私は他のワークステーションでテストを行い、すべてがこの "バグ"を持っているようです。

+2

これはhttp://stackoverflow.com/a/15110385/5147646に関連していますか? –

答えて

4

これはデバッグコンソールの動作です。表示された2つの日付の値は同じで、正しい値です。あなたはChromeで現地時間を見ているだけですが、FirefoxはUTC時刻をデバッグコンソールに表示することを選択します。

もっと正確に言えば、Chrome、IE、その他のほとんどのブラウザは、単に.toString()をオブジェクトに呼び出し、Firefoxは.toISOString()を呼び出します。 Firefoxは、私たちはタイムゾーン(夏時間の代わりの標準)の間違った名前を示すバグがありますが、デバッガの値はISO8601 UTC値と一致して見ることができる

FF Screenshot

注意。

4

あなたはタイムゾーンを使用して、として、Date.UTC

注使用することができます含まれてオフセットたくない場合:日付が複数の 引数を持つコンストラクタと呼ばれ、specifed引数はローカル時間を表します。 UTCが の場合は、同じ引数を使用してnew Date(Date.UTC(...))を使用します。 FirefoxのDEVコンソールから

MDN

出力:

> new Date(2015,9,1) 
    Date 2015-09-30T22:00:00.000Z // reproduces your problem, my local time is GMT+0200 
> new Date(Date.UTC(2015,9,1)) 
    Date 2015-10-01T00:00:00.000Z // UTC time 

しかし00:00:00 GMT+020022:00:00.000Z日付の文字列表現にタイムゾーンのオフセットを表現するだけで、さまざまな方法があります。違いは、コンソールに印刷するときに使用する方法です。ほとんどのブラウザではを使用し、Firefoxでは.toISOString()を使用します。 (編集済み;以前は、toStringメソッドの実装が異なっていて、これは真実ではありません)。 .getDate()様クロム(Thu Oct 01 2015 00:00:00 GMT+0200)とFirefox(Date 2015-09-30T22:00:00.000Z)両方の方法において

.getMonth()同じ値(19それぞれ)を返します。 Dateのオブジェクトは同じです。

+0

実際には 'Date.toString()'の実装ではありません。それは結構です。 FFのデバッガでは、代わりに 'Date.toISOString()'が使われているだけです。 –

+0

@MattJohnsonは説明のためにありがとう。 – pawel

関連する問題