【发布时间】: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