美文网首页
Js 计算指定月份的天数

Js 计算指定月份的天数

作者: O无为学长O | 来源:发表于2020-12-25 23:37 被阅读0次

    问题: 怎么在已知年份和月份的情况下,计算出这个月一共有多少天?

    这个有两种计算方案

    方案一

    因为月份总数是固定的,而每月的天数其实也是已知的,所以可以使用数组保存所有月份天数,然后根据月份去数组中取就行了,代码大致如下:

    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: 没错,百度知道上的那个提问就是我回答的,哈哈。

    相关文章

      网友评论

          本文标题:Js 计算指定月份的天数

          本文链接:https://www.haomeiwen.com/subject/trunnktx.html