date.getMonth() 两个月了

Kum*_*sai 2 javascript date

let date = new Date('2020-04');
let month = date.getMonth() + 1;
Run Code Online (Sandbox Code Playgroud)

这给了我 3 月而不是 4 月,休息了 1 个月,为什么呢?

如果我使用:

let date = new Date('2020-04');
month = date.getUTCMonth() + 1;
Run Code Online (Sandbox Code Playgroud)

然后我得到了正确的答案。我在加利福尼亚州。无论用户身在何处,我都需要正确的答案。即我需要四月作为正确答案。

tad*_*man 6

这将创建一个 UTC 日期:

let date = new Date('2020-04');
// 2020-04-01T00:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

请注意00.000Z“UTC”或“无偏移”的含义。

这会得到您当地时区的时间:

let month = date.getMonth() + 1;
Run Code Online (Sandbox Code Playgroud)

如果您位于 GMT 线以西,您会得到一个稍低的值,即该日期之前 X 小时,但如果您位于东边,那就没问题了。

您的 UTC 解决方案是正确的,因为您需要 UTC 日期中的 UTC 月份。另一种方法是指定一个包含时区的时间,如下所示:

let date = new Date('2020-04-01:00:00:00-0700');
// 2020-04-01T07:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

您可以看到 UTC 偏移量现在显示为 07:00,而不是 00:00。getMonth()现在返回3