5

タイムゾーンと JavascriptDateオブジェクトで奇妙なことに気付きました。

Linuxボックスでこれを試す:

$ TZ='America/Sao_Paulo' js 
js> new Date(2012, 9, 21, 0, 0, 0).toString() 
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)"

2012 年 10 月 21 日を表すオブジェクトを取得することは不可能であることがわかりました。Dateその日の 00:00 から 01:00 の間を取得しようとすると、前日の 11:00 PM から 00:00 の間の日付になります。

(Windows ユーザーは、タイムゾーンを Brasilia/GMT-03 に変更して、同じ動作を体験することができます)

このような日付オブジェクトに 1 時間 (または 1 日) を追加すると、同じ日付が返されます。

ブラジルでその特定の日付に発生する夏時間と関係があると思いますが、それを処理する方法がまったくわかりません。

私は月の日を繰り返すループを持っています(カレンダーアプリケーションの場合)。その場合、2012 年 10 月 20 日に達すると、明らかに永遠にループします。

私が間違っていることがあるに違いありませんが、他のタイムゾーンでも発生する可能性があるため、そのような場合の対処方法がわかりません。

Dateこのようなタイムゾーン/サマータイム関連の問題が発生しないようにするために、Javascriptで推奨される処理方法は何ですか?

4

1 に答える 1

0

これは絶対に正しい動作です。DST のため、10 月 21 日のブラジルの現地時間には真夜中は存在しません。カレンダーを作成する必要があるだけの場合は、new Date(2012, 9, 21, 0, 0, 0).toUTCString()代わりにnew Date(2012, 9, 21, 0, 0, 0).toString()他のUTC メソッドを使用できます。

たとえば、UTC 日付を作成するには、new Date(Date.UTC(2012, 9, 21, 0, 0, 0));.

于 2012-10-03T09:37:30.717 に答える