已知年月,求该月共多少天?
在写日历组件时,曾遇到 已知年月,求该月共多少天? 这样的需求。
最开始思路会是:
- 先判断该年份是否是闰年,来处理 2 月份情况,闰年 2 月共 29 天,非闰年 2 月共 28 天
- 再判断其他月份,如 1 月共 31 天,4 月共 30 天
代码就不一一列出了,思路代码啥的没啥问题。
这里其实有种更简便的方法,借助 Date
API 处理日期溢出时,会自动往后推延响应时间的规则,直接上代码:
// month 值需对应实际月份减一,如实际 2 月,month 为 1,实际 3 月,month 为 2
function getMonthCountDay (year, month) {
return 32 - new Date(year, month, 32).getDate()
}
验证下:
// 求闰年的 2 月份总天数
getMonthCountDay(2000, 1) // 29
// 求非闰年的 2 月份总天数
getMonthCountDay(2001, 1) // 28
// 求 1 月份总天数
getMonthCountDay(2000, 0) // 31
getMonthCountDay(2001, 0) // 31
// 求 4 月份总天数
getMonthCountDay(2000, 3) // 30
getMonthCountDay(2001, 3) // 30