# 已知年月,求该月共多少天

// month 值需对应实际的月份,如实际 2 月,month 为 2,实际 3 月,month 为 3
function getMonthCountDay1 (year, month) {
  return 32 - new Date(year, month - 1, 32).getDate()
}
// month 值需对应实际的月份,如实际 2 月,month 为 2
function getMonthCountDay2 (year, month) {
  return new Date(year, month, 0).getDate()
}

示例:

getMonthCountDay1(2019, 2) // 28
getMonthCountDay2(2019, 2) // 28

getMonthCountDay1(2020, 2) // 29
getMonthCountDay2(2020, 2) // 29

测试:

getMonthCountDay2(, )

解析:

利用了 Date API 处理日期溢出时,会自动往后推延响应时间的规则:

  • new Date(2019, 0, 50)其中0代表1月,1月只有31天,则多出来的19天会被加到2月,结果是2019年2月19日。
  • new Date(2019, 20, 10),1年只有12个月,多出来的9个月会被加到2020年,结果是2020年9月10日
  • new Date(2019, -2, 10),2019年1月10日往前推2个月,结果为2018年11月10日
  • new Date(2019, 2, -2),2019年3月1日往前推2天,结果为2019年2月26日
  • 以上可以混用