首页 > 解决方案 > JS Date() 对象的奇怪行为

问题描述

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

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

为什么它返回 2020-08-31 而不是 2020-08-01?我究竟做错了什么?

标签: javascriptnode.jsdatetime

解决方案


输出

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"

推荐阅读