JavaScript - Date()、new Date()和ISODate之间的区别

6

我看到过各种版本的这个问题,但没有一个能满足我的需求。

我想要在使用Node.js时为MongoDB创建一个ISODate。

在Node中,当我执行以下操作时:

console.log(Date());

我得到了:

2016年9月26日星期一 15:17:04 GMT-0400 (EDT) <-- 这是正确的。

当我执行以下操作时:
console.log(new Date());

我得到:

2016年09月26日19:17:04.731Z <- 这比标准时间提前4小时

我对如何使用ISODATE的理解是:

var isodate = new Date().toISOString()
console.log(isodate);

这将得出比“现在”提前4小时的时间。

我的系统日期是正确的。 我在不同的机器上运行它,结果都一样。

请问有人可以解释为什么会出现时间差异吗?


4
并不是比UTC时间快4小时。字符串末尾的Z表示这是一个UTC时间戳。你比UTC时间慢4小时,但两个日期代表的是同一个世界标准时间点。 - Pointy
这可能是您的本地时区偏移量。 - chenchuk
3个回答

4
区别在于2016-09-26T19:17:04.731Z与GMT0时区相关,而Mon Sep 26 2016 15:17:04 GMT-0400 (EDT)与你的本地时区相关。两者指向同一时间 :)。
您可以在维基百科上了解有关数据格式和时区的更多信息。

3

基本上,Date()new Date()之间的区别是:

  • Date()忽略传递给它的任何参数,并且等同于 new Date().toISOstring()

  • new Date(可选参数) 在JS中创建一个time类型对象,您可以对其执行以下操作:

  • getTime()或其他列在MDN网站上的Date.prototype函数

  • Date()只是本地时间的字符串表示。

    • new Date() 提供了一个可操作的对象来进行操作。

1
注意2016-09-26T19:17:04.731Z末尾的Z吗?它代表Zulu,意思是UTC时区(即GMT+000)。
正如您在原始日期字符串中看到的那样,Mon Sep 26 2016 15:17:04 GMT-0400 (EDT)有一个GMT-0400时区,我猜这是你所在地的本地时间。 因此,实际上没有问题,只是相同时间的不同表示方式:
  • Date()创建本地日期
  • new Date()创建UTC日期

2
糟糕。Date()返回一个表示当前日期和时间的实现相关的字符串new Date()返回一个表示当前日期和时间的Date 对象。;-) - RobG
是的,我知道。我感觉自己像个傻瓜。:-) 但我很高兴能问出这个问题。现在我比以前更聪明了。我感谢大家的回答! - user5161995

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接