一般写日历的时候都会计算平年、闰年、世纪年这些的月份天数,这时候我们会先写好包含每个月数组天数的数组,除了 2 月份特殊,需要通过平闰年来判定是 28 还是 29 天。
一般写法如下:
const monthsOfDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
const leapOfYear = function () { ... } // 此处不明写,网上也有很多示例
偶然也发现另外一种实现,我个人认为事先声明确定初始化会好些,而不是动态计算当月天数?
function getDaysInMonth(year, month) {
if (isNaN(year) || isNaN(month)) {
throw new Error('错误的年份或者月份')
return
}
if (month < 1 || month > 12) {
throw new RangeError(`错误的月份区间:${month}`)
return
}
return new Date(year, month, 0).getDate();
}
通过这个方法就可以很方便的获取到月份。
问题:为什么 new Date() 的 date 设置为 0 之后可以获取到当月的天数?