2017-05-31 34 views
1

日付と時刻のコレクションがあります。日付の文字列をタイムゾーン付きのISO日付に変換する

01.07.2013 16:10のようにフォーマットされています。

私はISO規格に適合するように再配置する必要があります知っているので、私はこのような文字列で終わるために管理:

2013-07-01T16:10

これから、Dateオブジェクトを作成する必要があります。これについて多くの質問を読んだ後、私はこれにタイムゾーンを追加する方法について少し混乱しています。すべての時間はニューヨークシティの現地時間であり、日付も保存したい。

Javascriptは自分のマシンからタイムゾーンを取っているので、NYCからタイムゾーンに変更した。ただし、以下の部分は私が混乱最も:

> print(new Date("2013-07-01T16:10")) 
Mon Jul 01 2013 16:10:00 GMT+2000 (EDT) 

質問:私のローカルタイムがGMT-0400(NYCの1)があるのに、なぜそれがGMT + 2000と言っていますか?これは正しいです'?そうでない場合、これはどのように正しく行われますか?

- アップデート: 私はmongoDB 3.4.4を使用しており、インタプリタのバージョンはMozJS-38です。 systemsetup -gettimezoneAmerica/New_Yorkを返します。クロムでモンゴーエクスプレスを実行すると、ISODate("2013-07-01T04:00:00.000Z")Mon Jul 01 2013 06:00:00 GMT+0200 (EDT)が保存されますが、シェルはprint(new Date("2013-07-01T04:00:00.000Z"));の場合はTue Jul 02 2013 00:00:00 GMT+2000 (EDT)と表示されます。

+0

「GMT + 2000」と正確には分かりますか?その場合は、マシンのタイムゾーンデータが破損しています。 GMTより20時間遅れている場所はありません。また、ニューヨークはその形式で「GMT-0400」となるでしょう。ここにゼロを入力していないのですか? –

+0

はい私は確信しています。はい、GMT-0400と期待しました。私はMacOSを使用している、タイムゾーンを変更した後に再起動しなかった。多分、これが原因です。 – ffritz

+0

[OK]をクリックしますが、GMT-4000を書きましたので、間違った位置にゼロがあります。 '' GMT + 2000 ''でも同じことをしていないのですか?あなたは '' GMT + 0200 ''を意味しましたか? –

答えて

1

Dateオブジェクトの作成時にタイムゾーンオフセットを指定していませんでした。

> new Date("2013-07-01T16:10-04:00") 
2013-07-01T20:10:00.000Z 
+1

ローカルタイムゾーンが実際にそのオフセットにある場合は、それを指定する必要はありません。オフセットなしのISO日付+時間は、ISO8601およびES2015 +(現代のすべてのブラウザ)によって現地時間と解釈されます。 –

+0

私はそれを知らなかった。私の間違い。 –

+0

ES6ではISO8601と一致するように変更されました。 ES 5.1以降はUTCと解釈されます。 Chromeは最後に実装されました。 –

関連する問題