问题: 怎么在已知年份和月份的情况下,计算出这个月一共有多少天?
这个有两种计算方案
方案一
因为月份总数是固定的,而每月的天数其实也是已知的,所以可以使用数组保存所有月份天数,然后根据月份去数组中取就行了,代码大致如下:
var arr = [31,29,31,30,31,30,31,31,30,31,30,31]; // 保存每一个月的天数
var month = 5; // 已知的月份
alert( month + "月一共有" + arr[month-1] + "天");
但这种方案有一个问题,就是2月份的天数是需要判断处理的,因为有闰年和平年。
方案二
要理解这个思路,需要知道 Date() 对象参数的特性。
Date() 可以获取当前时间,也可以设置成指定日期,比如 new Date(2020,3,15) , 将日期设置为2020年4月15日(月份参数从0开始标签,0表示1月,所以3表示4月)。
而如果参数设置的值超过范围,则会向前进位。
比如 new Date(2020,13,15),月份设置为14月,但实际一年只有12个月,超过月份范围,就会进位,最终设置的日期是 2021年2月15日。
同理,日期如果超过范围同样也会进位。所以 new Date(2020,5, 40) 设置的日期是2020年7月10日(5表示6月,6月只有30天,6月进位成7月,日期40-30,为10日)。
利用以上原理,因为日期不可能超过32天,所以可以利用32这个数字来计算当前月份有多少天。方法是用当前月份作为月份,用32作为日期,去设置日期,这样日期就会进位,然后取出进位后的日期,用 32 减去这个日期就是当月的天数。比如当前月份是6月,年份是2020年,想知道6月有多少天: new Date(2020,6-1,32), 这样设置的实际时间是2020年7月2号,将2号这个日期取出来, 32 - 2 = 30 ,可以得出 6月一共有30天,具体代码大概如下:
var month = 6; // 表示当前月份的变量
var year = 2020; //年份, 这个根据实际情况而定,是给定的值,还是根据当前时间来获取年份。
var newDate = new Date(year, month - 1, 32); // 根据月份设置日期
var day = 32 - newDate.getDate(); // 根据设置的日期来获取当前月份的天数。
alert( month + "月一共有" + day + "天。");
这种思路的好处是不论闰年平年都可以正确获取到2月份的总天数,甚至还可以通过2月份的天数反过来推算出今年是闰年还是平年。
Ps: 没错,百度知道上的那个提问就是我回答的,哈哈。
网友评论