2012-01-16 12 views
30

:日付( '2012年1月15日')なぜ新しい - 私は混乱しているが、JavaScriptで新しい日付( '2012-01-15')==2160万

> new Date('2012-1-15') - new Date('2012-01-15') 
    21600000 

のはなぜですそれ? (21600000/1000/3600 == 6時間)

+4

ここでは14400000(4時間)が印刷されます。私はGMT-4にいる。それはおそらく関連しています:) – BalusC

+2

私にとっては失敗します - 2012-1-15は日付オブジェクト(FF 9.0.1)の代わりに無効な日付を返し、全体がNaNを返す原因となります。 –

+0

私は18000000、5時間、私はGMT-5です...私はこの1つの@BalusCと一緒にいます。 –

答えて

37

yyyy-mm-dd(2012-01-15)はUTCの日付として解析され、yyyy-m-dd(2012-1-15)はローカル日付として解析されます。これはそれぞれに.toStringを使用すると表示されます。

> (new Date('2012-01-15')).toString() 
"Sat Jan 14 2012 16:00:00 GMT-0800 (Pacific Standard Time)" 
> (new Date('2012-1-15')).toString() 
"Sun Jan 15 2012 00:00:00 GMT-0800 (Pacific Standard Time)" 

私はカリフォルニア、したがって太平洋標準時にいることに注意してください。異なるタイムゾーンにいる場合、異なる結果が得られます。

JavaScriptは日付を解析するときに、ローカライズされた日付形式を試す前に、より多くの領域(UTCなど)で使用されている形式を最初に試します。 UTC日付形式の最後の部分は、GMTからのタイムゾーンオフセットです(この例のように、欠落している場合は0とみなされます)。同じ日付を取得するには、UTCタイムスタンプ(2012-01-15T00:00:00-08:00)が必要です。

+6

これはなぜ起こるのか知ることは興味深いでしょう。 – Hamish

+0

@ハミッシュ私は少しの説明を加えましたが、もっと深く進むべきかどうかを教えてください。 –

+3

非常に奇妙なので、2012年10月15日はどのように解析する必要がありますか? utcとローカルの両方にすることはできません。 –

7
a= new Date('2012-1-16') 
b= new Date('2012-01-16') 
alert(a); 
alert(b); 

最初のケースでは、コンストラクタ関数は時刻をあなたのタイムゾーンで00:00に設定します。しかし、2番目のケースでは、GMT +00.00に対して時間を初期化します。

10

new Date('2012-1-15')の結果は実装に依存します(ECMAScript standard、条項15.9.4.2)。

関連する問題