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

JavaScript - difference between Date(), new Date(), and ISODate

我看过这个问题的各种版本,但其中 none 满足了我的需求。

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

在 Node 中,当我这样做时:

console.log(Date());

我得到:

Mon Sep 26 2016 15:17:04 GMT-0400 (EDT) <-- This is correct.

当我这样做时:

console.log(new Date());

我得到:

2016-09-26T19:17:04.731Z <- This is 4 hours ahead

我对ISODATE方式的理解是:

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

产生的时间比 "now" 提前 4 小时。

我的系统日期是正确的。 我运行这台不同的机器,我得到的结果是一样的。

谁能解释一下为什么我的时间出现偏差?

不同之处在于 2016-09-26T19:17:04.731Z 与 GMT0 时区相关,而 Mon Sep 26 2016 15:17:04 GMT-0400 (EDT) 与您当地的时区相关。两者都指向同一时间:)

您可以在 Wiki

中阅读有关数据格式和时区的更多信息

注意到 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 日期

Date()new Date()的区别有了基本的定义 是:

  • Date() 忽略传递给它的任何参数,相当于 new Date().toISOstring()

  • new Date(Optional_arguments) 在 JS 中创建一个 time 类型的对象,您可以在其上执行:

  • getTime()MDN Website

  • 中列出的其他 Date.prototype 函数
  • Date() 只是本地时间的字符串表示。

    • new Date() 给你一个可操作的对象 fiddle 左右。