方式1:较简单,不过需判断目标年份是闰年还是平年
因为一年12个月是固定的,每个月的天数除了2月也是固定的,所以可以直接写一个数组,把天数直接放数组里。
比如 var arr = [31, 28, 31, 30…., 31, 30] // 依次列出每月的天数。
然后根据月份去读取数组里的值,需要注意的是取值是月份要减1,因为数组下标从0开始。
比如当前月份为5月,那么那么当月一共有 arr[5-1]天。
假设用变量 month 表示月份,那么可以这样拼接字符串:
“现在是” + month + “,本月一共有” + arr[month-1] + “天。”
这种方式有个缺陷就是2月分天数的不确定,需要判断当前年份是闰年还是平年。
方式2:通用
先解释一下原理,不想看可以直接使用最下面的函数:
Date() 可以获取当前时间,也可以设置成指定日期,
new Date(‘2021-01-01’) => 2021年1月1日
new Date(2021, 0, 1 ) => 2021年1月1日
比如 new Date(2021, 1, 1) , 将日期设置为2021年2月1日(js中月份从0开始,1表示2月)。
而如果参数设置的值超过范围,则会向前进位。
比如 new Date(2020, 13, 1),月份设置为14月,但实际一年只有12个月,超过月份范围,就会进位,最终设置的日期是 2021年2月1日。
同理,日期如果超过范围同样也会进位。
所以 new Date(2021, 3, 35) 设置的日期是2021年5月5日(3表示4月,由于4月只有30天,月份由4月进位成5月,日期 35-30,为5日)。
利用以上原理,因为日期不可能超过32天,所以可以利用32这个数字来测试当前月份有多少天,
方法是用当前月份作为月份,用32作为日期,去设置日期,然后取出设置结果的日期,用 32 减去这个日期就是当月的天数。
比如当前月份是2月,年份是2021年,想知道2月有多少天:
new Date(2021, 2 - 1, 32)
这样设置的实际时间是2021年3月4号,将4号这个日期取出来, 32 - 4 = 28 ,可以得出2月一共有28天
这种方式不论闰年平年都可以正确获取到2月份的总天数,
甚至还可以通过2月份的天数反过来推出今年是闰年还是平年。
function handleGetTargetMonthRange(target = new Date()) {
target = new Date(target); // 目标日期
var year = target.getFullYear(); // 目标年份
var month = target.getMonth() + 1; // 目标月份
var date = new Date(year, month - 1, 32); // 设置日期
var day = 32 - date.getDate(); // 根据设置的日期来获取当前月份的天数
return day;
}