Javascript/节点日期规范

Javascript/节点日期规范,javascript,node.js,reference,documentation,Javascript,Node.js,Reference,Documentation,我知道的JS的官方文档是 但我很好奇,在谈论NodeJS时,这里是否也是合适的地方。 这里:是关于日期的文档 构造函数: 新日期(年、月、日、小时、分钟、秒、毫秒) 而且 年份 表示年份的整数值。从0到99的值映射到1900年到1999年;所有其他值均为实际年份。请参见下面的示例。 monthIndex表示月份的整数值,从1月的0开始到12月的11日 如果在Chrome中执行以下代码,则会得到与node JS CLI不同的结果: let d = new Date(2017,0,1); conso


我知道的JS的官方文档是

但我很好奇,在谈论NodeJS时,这里是否也是合适的地方。
这里:是关于
日期的文档

构造函数:
新日期(年、月、日、小时、分钟、秒、毫秒)

而且

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

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

如果在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)
基于monthIndex从0到11的结果,NodeJS结果与预期不同

2016-12-31T23:00:00.000Z
传统的格式似乎不同。那么NodeJS的官方文档在哪里,因为MDN文档似乎不适用于NodeJS

编辑: ECMA文档(官方版本A也规定范围为0-11而非1-12)

月份由0到11(包括0到11)范围内的整数标识

编辑2: 由于时区不同,node和Chrome(任何浏览器)的实现似乎有所不同。因此,时区GMT+1中的浏览器比节点早一个小时(至少从dd.MM.yyyy表示)

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

----------------------[解决方案]---------------------------
当您使用
新日期([任何])
时,它总是在您的时区中创建日期。
但取决于它以GMT+0000或您自己的时区显示的实现。

因此,如果您喜欢创建日期,而不关心时区(NodeJS上最常见的情况),则应使用date.UTC在GTM+0000中创建日期NodeJS是一个ECMAScript引擎,因此它确实遵循规范。两个对象构造函数的工作方式完全相同

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

但是为什么NodeJS在祖鲁时间显示日期,而浏览器在本地时区显示日期


这是因为您将date对象传递给控制台,而没有指定控制台。虽然Chrome显示本地时区的日期是有道理的,因为浏览器是向用户显示数据的,用户只对本地时间感兴趣,wereas NodeJS是为服务器构建的,它们独立于位置运行(你的服务器是在法兰克福、纽约还是东京运行有关系吗?不,不太重要)。

不,JS的官方规范是在MDN,而可靠的文档来源并不完全是“官方”(基本上是一个维基),但为什么Chrome(opera)会出现呢与NODEI不同的输出如果仔细观察,您会发现两个日期是相同的。它们只是显示方式不同。因此
新日期(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是的。控制台以一种对调试有用的方式表示它。没有人真正使用基于零的月份,对吗?
新日期
是本地时间,所以您在西欧可以使用午夜。构建一个祖鲁日期使用
date.UTC