2016-08-02 7 views
-1

日付コンストラクタnew Date( '2015'、 '12')を使用して日付を作成すると、金曜日01 01 2016 00:00:00 GMT-0500(東部標準時)になります。しかし、私が提供している日付がすでに昼光変換を適用していて、2016年12月の日付オブジェクトを2016年の代わりに作成すると仮定しないでください。javascript夏時間変換なしの日付を作成する

+5

'new Date( '2015'、 '12')'は2015年の第13月、2016年1月の日付です - DSTなしの問題... – dandavis

+0

thats true。それを指摘してくれてありがとう。しかし、私の質問は一般的です。 –

+0

あなたが望むものは本当に明確ではありません。あなたが期待している出力は何ですか? – JJJ

答えて

2

Dateコンストラクタを使用して日付を作成するとき、 ほぼ常に(ECMA-262による)です。唯一の例外は、数値(ECMAScriptエポックから時間値、つまりミリ秒単位で解釈される)が提供される場合、またはISO 8601形式の文字列にタイムゾーンが指定された場合です。それでも、日付の内部時刻値(エポック即ちミリ秒)をUTCに計算され、ホストシステムのタイムゾーン等次に、getHoursgetMinutes

ような非UTC方法に使用オフセットまた、現在のシステム設定のタイムゾーンオフセットは、過去の日付に使用されます。したがって、ホストが夏時間に設定されている場合、ホストは夏時間が実装される前の日付に適用されます。また、夏時間の切り替えの日付と時刻(および値)の履歴の変更は適用されません。現在の設定は、過去および将来の日付に常に適用されると想定されています。

new Date('2/3/2016'); // US format is assumed by most browsers. 
         // May also create an invalid Date 
new Date(2016, 1, 3); // months are zero indexed so 1 is February 
new Date('2016-02-03T00:00:00'); // note missing time zone 

ただし、以下はUTC(または無効)として扱われます:

だから、次のすべてが2016年2月3日の日付を作成するときに、ホスト・システムのタイムゾーンのオフセットを適用します

new Date('2016-02-03'); // contrary to ISO 8601, missing time zone for this 
         // format only is assumed to be UTC 
new Date('2016-02-03T00:00:00Z'); // Note has a time zone of GMT 

文字列から特定の瞬間のDateを確実に作成するには、文字列にタイムゾーンオフセットを指定する必要があります。その後、日付文字列の解析は主に実装に依存し、実装によって異なります。関係なく、ホストシステムの設定が何であるかを時間内に同じ瞬間を表していない

'2016-02-03T00:00:00-0800' 

:使用するのに最適なフォーマットは、ISO 8601がそうのようなものを拡張しています。あなたはそれを確実に解析する必要があります。

構文解析と書式設定には多くのライブラリがあります。また、特定の構文解析と出力フォーマットに独自の小さな関数を記述することもできます。

関連する問題