2017-05-31 215 views
1

我有一組日期和時間,它的格式如下:將日期字符串轉換爲帶日期的ISO日期

01.07.2013 16:10

我知道我必須重新安排,以配合ISO標準,所以我設法用這樣的字符串結束:

2013-07-01T16:10

由此,我需要創建一個Date對象。在閱讀關於此的許多問題後,我對如何添加時區有點困惑。所有的時間都在紐約當地時間的城市,我也想把日期存儲在裏面。

所以既然Javascript從我的機器上取時區,我就把它改成了紐約的那個時區。但是,下面的部分混淆了我最:

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

問:爲什麼它說GMT + 2000年的時候我的本地時間爲GMT-0400(NYC的一個)?它是否正確'?如果不是,這是如何正確完成的?

- 更新: 我使用mongoDB 3.4.4和解釋器版本是MozJS-38systemsetup -gettimezone返回America/New_York。在chrome中運行mongo-express顯示:Mon Jul 01 2013 06:00:00 GMT+0200 (EDT)ISODate("2013-07-01T04:00:00.000Z")存儲,但shell說Tue Jul 02 2013 00:00:00 GMT+2000 (EDT)print(new Date("2013-07-01T04:00:00.000Z"));

+0

你確定它確切地說'「GMT + 2000」'?如果是這樣,你的機器的時區數據已損壞。世界上沒有比格林威治時間早20小時的地方。此外,紐約將採用該格式的「GMT-0400」。你確定你不是在這裏打零嗎? –

+0

是的,我確定。是的,我也希望它是'「GMT-0400」'。我正在使用MacOS,在更改時區後未重新啓動。也許這是原因。 – ffritz

+0

好的,但你*寫了''「GMT-4000」',所以你在錯誤的位置有零。你確定你沒有使用'GMT + 2000''嗎?你的意思是'「GMT + 0200」'? –

回答

1

創建Date對象時,您沒有指定時區偏移量。

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

如果本地時區實際上在該偏移量中,則不需要指定它。根據ISO8601和ES2015 +(所有現代瀏覽器),無日期的ISO日期+時間應解釋爲當地時間。 –

+0

我沒有意識到這一點。我的錯。 –

+0

它在ES6中更改爲符合ISO8601。 ES 5.1和更低版本將解釋爲UTC。 Chrome是最後實施的。 –