JS Date对象的奇怪行为

问题描述

我想代表给定月份的第一天,例如2020年9月1日。当我在控制台中执行此操作时,得到以下输出

$ node
> new Date(2020,8,1)
2020-08-31T23:00:00.000Z

它如何返回2020-08-31而不是2020-08-01?我在做什么错了?

解决方法

输出

2020-08-31T23:00:00.000Z

是ISO格式,Z显示日期为UTC。当您调用Date构造函数时,默认情况下它将使用您的浏览器时区,我可以假设它是+01:00。此外,构造函数中的月度索引从零开始。

如果您想要的是UTC的月初,则可以执行以下操作:

d = new Date(Date.UTC(2020,8,01))
d.toISOString()
"2020-09-01T00:00:00.000Z"
,

尝试

new Date(2020,7,1)

因为日期对象是从0-11否1-12计数