提问人:Kumar Desai 提问时间:3/23/2023 最后编辑:tadmanKumar Desai 更新时间:3/23/2023 访问量:87
date.getMonth() 是两个月的
date.getMonth() is two months off
问:
let date = new Date('2020-04');
let month = date.getMonth() + 1;
这是给我三月而不是四月,这是 1 个月的假期,这是为什么?
如果我使用:
let date = new Date('2020-04');
month = date.getUTCMonth() + 1;
然后我得到了正确的答案。我在加利福尼亚。无论用户身在何处,我都需要答案是正确的。即我需要四月作为正确答案。
答:
6赞
tadman
3/23/2023
#1
这将创建一个 UTC 日期:
let date = new Date('2020-04');
// 2020-04-01T00:00:00.000Z
请注意“UTC”或“无偏移量”的含义。00.000Z
这将在您的本地时区中获取:
let month = date.getMonth() + 1;
如果你在格林威治标准时间线以西,你会得到一个略低的值,它将在该日期之前 X 小时,但如果你在东边,那就没问题了。
您的 UTC 解决方案是正确的,因为您需要从 UTC 日期开始的 UTC 月份。另一种方法是指定一个包含时区的时间,如下所示:
let date = new Date('2020-04-01:00:00:00-0700');
// 2020-04-01T07:00:00.000Z
您可以看到 UTC 偏移量的位置现在显示为 07:00,而不是 00:00。 现在返回 .getMonth()
3
评论
0赞
Kumar Desai
3/23/2023
好的,好吧,我只使用UTC解决方案。谢谢。
0赞
steev
3/23/2023
#2
在 JavaScript 中,Date 对象受用户本地时区的影响。当您创建新的 Date 对象时,如下所示:new Date('2020-04'),它将被解释为位于用户的本地时区。由于您位于加利福尼亚州,因此它使用的是太平洋时间 (PT)。
在这种情况下,由于夏令时,日期会受到时区偏移量的影响。4 月,加利福尼亚州采用太平洋夏令时 (PDT),即 UTC-7,因此当您在午夜创建日期时,它实际上比 UTC 晚 7 小时。这意味着,在 UTC 中,它仍然是 3 月 31 日 17:00。
但是,当您调用 getUTCMonth() 时,它会返回基于 UTC 的月份,即 4 月。由于您希望无论用户身在何处,答案都是正确的,因此您可以继续使用 getUTCMonth() + 1。
评论
+1