前言
接到一个需求,需要输入年份和月份,返回这个月的最后一天的日期。当时的第一想法就是:一三五七八十腊,三十一天永不差;四六九十一,三十天;二月平年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