【问题标题】:Javascript/Node Date specificationJavascript/节点日期规范
【发布时间】:2019-12-27 15:01:29
【问题描述】:


我知道的 JS 官方文档是 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference

但我很好奇这是否也是谈论 NodeJS 时要寻找的正确位置。
这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date 是关于 Date 的文档

构造函数:
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

还有

year 表示年份的整数值。从 0 到 99 的值映射到 1900 到 1999 年;所有其他值都是实际年份。请参见下面的示例。

monthIndex 表示月份的整数值,从 0 开始表示 1 月到 11 表示 12 月

如果我在 Chrome 中执行以下代码,我会得到与 node JS CLI 不同的结果:

let d = new Date(2017,0,1);
console.log(d);

Chrome 结果是我对文档的期望:

Sun Jan 01 2017 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit)

基于从 0 到 11 的月份索引,NodeJS 结果与预期不同

2016-12-31T23:00:00.000Z

另外,格式似乎不同。那么 NodeJS 的官方文档在哪里,因为 MDN 文档似乎不适用于 NodeJS

编辑: ECMA 文档(这是官方版本 a 还声明范围是 0 - 11 而不是 1-12)

月份由 0 到 11 范围内的整数标识。

编辑 2: 节点和 Chrome(任何浏览器)到期时区的实现似乎不同。因此 GMT +1 时区的浏览器比节点提前一小时(至少从 dd.MM.yyyy 表示来看)

但是为什么节点不返回 1.1.2017 00:00 和浏览器 1.1.2017 01:00 GTM +0100 ?

----------------------[解决方案]---------- ---

当您使用 new Date([Whatever]) 时,它始终会在您的时区中创建日期。
但根据实施情况,它会在 GMT +0000 或您自己的时区显示。
因此,如果您想创建一个日期并且您不关心在 NodeJS 上大多是这种情况的时区,您应该使用 Date.UTC 在 GTM +0000 中创建日期

【问题讨论】:

  • 不,JS 的官方规范位于 ecma-international.org/publications/standards/Ecma-262.htm MDN,虽然是可靠的文档来源,但并不完全是“官方”(它基本上是一个 wiki)
  • 但是为什么 Chrome(opera) 的输出与 Node 不同
  • 如果您仔细观察,您会发现两个日期相同。它们只是显示方式不同。

标签: javascript node.js reference documentation


【解决方案1】:

NodeJS 是一个 ECMAScript 引擎,因此它确实遵循规范。两个对象构造函数的工作方式完全相同。

在中欧的午夜,当我们已经庆祝新年前夜时,生活在绿色时区的人们仍然需要等待一个小时。所以这两个日期实际上代表相同的时间点,只是在不同的当地时间。

但为什么 NodeJS 以 Zulu 时间显示日期,而浏览器以本地时区显示日期?

那是因为你将日期对象传递给控制台,而没有指定控制台。尽管 Chrome 以本地时区显示日期是有道理的,因为浏览器旨在向用户显示数据,而用户只对他的本地时间感兴趣,NodeJS 是为服务器构建的,它们独立运行他们的位置(您的服务器在法兰克福、纽约或东京运行是否重要?不,不是真的)。​​

【讨论】:

  • 所以new Date(2017,0,1); 应该返回 2016-12-31T23:00:00.000Z
  • 不应返回 Chrome Sun Jan 01 2017 01:00:00 GMT+0100 和 Node Sun Jan 01 2017 00:00:00
  • 是的。控制台以对调试有用的方式表示它。没有人真正使用从零开始的月份,对吧?
  • new Date 适用于当地时间,因此您会在西欧到达午夜。要构建祖鲁日期,请使用 Date.UTC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多