js获取每个月最后一天的三种方法

前言

接到一个需求,需要输入年份和月份,返回这个月的最后一天的日期。当时的第一想法就是:一三五七八十腊,三十一天永不差;四六九十一,三十天;二月平年28天,闰年29天。闰年是能被4除尽的年份。内心OS:哇,这要好多判断,好麻烦!!

但是第一种方法就是按照上述来实现的,然后想到Date中是否有相关的方法可以实现,通过查看文档,发现是ok的,第二和第三种方法都是听过Date来实现的。具体思路可参考下面三种实现方法。

第一种方法

实现思路:对月份进行31天和30天的分组,如果是2月份判断是否闰年,如果其他月份就判断该月份属于31天那组月份组,还是30天月份组,根据判断结果返回对应的日期。

function getLastDay(year, month) {
    const isLeapYear = ((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)
    const maxDays = [1,3,5,7,8,10,12]  
    const middleDays = [4,6,9,11]  
    month = Number(month)
    if (month == 2) {
        if (isLeapYear) {
            return 29
        } else {
            return 28
        }
    }  else  if (maxDays.includes(month)) {
        return 31
    } else if (middleDays.includes(month)) {
        return 30
    }
} 
复制代码

第二种方法

实现思路:获取下个月的1号的00:00时刻,然后减去1秒(或者毫秒、分钟、小时),再输出day即可获取当月最后一天的日期。

function getLastDay(year, month) {
  return new Date(new Date(`${month<12?year:++year}-${month==12?1:++month} 00:00`).getTime() - 1).getDate()
}

复制代码

第三种方法

实现思路:利用Date函数对传入的日期参数(参数值为0),new Date(year,month,date),month取值范围为0-11(这样直接传入需求的月份就是下一个月)。

function getLastDay(year, month) {
      const date1 = new Date(year, month, 0)
      return date1.getDate()      
}  
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享