Angular中Date对象getMonth()返回值与预期不符问题咨询
问题原因解析
这是一个JavaScript日期处理里非常常见的“新手坑”,和UTC或者本地化完全没关系——getMonth()方法的返回值是从0开始索引的!
具体的索引对应关系是:
- 0 对应 1月
- 1 对应 2月
- 2 对应 3月
- 3 对应 4月
- ...以此类推,11对应12月
所以你设置的是2000年4月1日,调用getMonth()返回3是完全正确的结果,调试器显示的日期没错,只是你对这个方法的索引规则不熟悉而已。
举个简单的代码例子验证:
// 注意:Date构造函数的月份参数也是0开始的,3代表4月 const date = new Date(2000, 3, 1); console.log(date.getMonth()); // 输出3 console.log(date.toLocaleDateString()); // 输出类似 "2000/4/1"(不同地区格式可能有差异,但月份是4月)
如果你需要获取从1开始的常规月份数值,只需要给返回值加1就行:
const actualMonth = date.getMonth() + 1; console.log(actualMonth); // 输出4,对应4月
补充一点:哪怕你使用getUTCMonth()方法,它的索引规则也是0-11,所以不管时区如何,这个月份索引逻辑不会变,和你有没有用UTC无关。
内容的提问来源于stack exchange,提问作者Pradeepl
相关产品推荐
相关产品推荐

