私たちは、タイムゾーンオフセットが "-05:00"Date.getTimezoneOffset()である東部時間帯( "America/New_York")であることに気付きました。 300のpositive数。Utcから西のエリアではオフセットが負で、東のエリアでは正になると予想されます。 Utcのですが、明らかに「反転」しています。その決定の背後にある理由は何ですか?
http://momentjs.com/ は同じルールに従って戻ります...
moment.parseZone("01/13/2014 3:38:00 PM +01:00").zone() // == -60
moment.parseZone("01/13/2014 3:38:00 PM -01:00").zone() // == 60
同時に、DateTimePicker http://trentrichardson.com/examples/timepicker/ は、最初の「タイムゾーン」パラメーターを設定するときに数値を反転しません。違いますか?
それが定義されている方法だからです。ドキュメントの引用( [〜#〜] mdn [〜#〜] ):
タイムゾーンオフセットは、UTCと現地時間の差(分単位)です。これは、ローカルタイムゾーンがUTCより遅い場合はoffsetが正であり、先行する場合は負であることを意味することに注意してください。
Raina77owの完全に受け入れられる答えについて少し詳しく説明します...
まず、ここに含まれる主な標準が ISO 8601 および RFC 822 (およびその関連物 7 、 112 であることを理解してください& 2822 )、これらはすべて(一部)ANSI X3.51-1975から派生したものです。
これらの標準はすべて、UTC/GMTの東である正の値とUTC/GMTの西である負の値の規則を使用しています。
私が知っている唯一の標準が逆になっているのはPOSIXです( タイムゾーンタグwiki および この記事 のPOSIXセクションを参照してください)。互換性「Etc/GMT + 5」などのOlsonタイムゾーンの符号は反転しています。 (もちろん、他の用途がある可能性がありますが、私はそれらを知らないだけです。)
信じられないかもしれませんが、JavaScriptは両方の方法でそれを行います。 (RFC 822またはISO 8601構文で)文字列として使用する場合、UTCの正のオフセットEastで時間と分を使用します。ただし、Date
オブジェクトでgetTimezoneOffset()
メソッドを呼び出すと、UTCの正Westである分全体を返します。 。
この矛盾が存在する理由を推測することしかできません。 ECMAScript spec には、このような問題がたくさんあります。おそらく、ISO 8601またはRFC 822文字列にオフセットが表示されている場合、そのオフセットがalreadyが適用されているためです。ただし、getTimezoneOffset()
を呼び出すと、UTCに戻すためのオフセットtoが適用されます。
たとえば、_2014-01-01T00:00:00-05:00
_は_2014-01-01T05:00:00Z
_と同じです。したがって、getTimezoneOffset()
は_300
_を返します。元の値に300分を追加すると、UTCに戻ります。
同じコインの両面です。見る?
その特定のコントロールが間違っているかどうかに関して、私にはわかりません。私はその特定のコントロールに精通していません。彼らのドキュメントでは-0400が-240に等しい例が見られますが、これは逆になると予想されるかもしれませんが、ユーザーに-240のような値を提示するのは少し奇妙です。実際、どちらの方法でもユーザーにオフセットを公開するべきではありません(IMHO)。 this one または this one のようなタイムゾーンピッカーコントロールを使用する方がはるかに優れています。