JS Date对象获取月份天数返回错误结果问题咨询
问题原因
错误是getMonth()的返回值规则导致的,和你用字符串初始化Date的逻辑无关:
- 用
2021/9/11这类字符串创建Date实例时,月份确实按1-12的常规计数识别,拿到的日期对象是正确的。 - 但
Date.getMonth()方法的返回值是0-11计数:9月对应返回值为8,10月对应返回值为9。 - 你用的
new Date(年, 月, 0).getDate()逻辑,本身的作用是获取「传入月份的上一个月的总天数」。
三者叠加就出现了你遇到的异常:
- 9月传入
getMonth()返回的8,计算得到8月的总天数31,和预期9月30天不符 - 8月传入
getMonth()返回的7,计算得到7月总天数31,刚好和8月天数一致,所以看似正常 - 10月传入
getMonth()返回的9,计算得到9月总天数30,和预期10月31天不符
修复方案
调整计算逻辑,给getMonth()的返回值加1即可:
const date = new Date("2021/9/11"); // 月份参数+1,取对应月份上个月的最后一天,刚好是当前月份的总天数 const daysInMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(); console.log(daysInMonth) // 输出30,符合预期
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

