2017-05-31 216 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是最后实施的。 –