JS获取近N天或N月或N年的时间和两个时间段的总天数
将之前写的JS获取近3个月、近1个月、近1周的日期范围进行整合并进一步优化修改
1 function getDateTime(num,dateName,startTime){ 2 //num 为所传递的数目参数; 3 //dateName 为所传递的年(year) 月(month) 日(day)的参数; 4 //比如3天,则num为3,date为day,一个月,则num为1,date为mounth 5 //startTime 为所传递的最开始的时间参数,字符串形式,默认为当天 6 var dateObj = {}; 7 dateObj.now = startTime == undefined ? new Date() : new Date(startTime); 8 var year = dateObj.now.getFullYear(); 9 var month = dateObj.now.getMonth() + 1; //0-11表示1-12月 10 var day = dateObj.now.getDate(); 11 var endDate; 12 if(date == "day"){ 13 endDate = startTime == undefined ? new Date() : new Date(startTime); 14 endDate.setDate(endDate.getDate() - num); 15 } 16 if(date == "year"){ 17 endDate = (year - num) + "/" + month + "/" +day; 18 endDate = new Date(endDate); 19 } 20 if(date == "month"){ 21 //n个月前所在月的总天数 22 var lastMonthDay; 23 if(month - num <= 0){ //当近n个月在上一年的时间时 24 lastMonthDay = new Date((year - 1), (12 - (num - month)), 0).getDate(); 25 if(lastMonthDay < day){ //n个月前所在的总天数小于现在的天日期 26 endDate = (year - 1) + "/" + (12 - (num - month)) + "/" + lastMonthDay; 27 }else{ 28 endDate = (year - 1) + "/" + (12 - (num - month)) + "/" + day; 29 } 30 }else{ 31 lastMonthDay = new Date(year, (month - num), 0).getDate(); 32 if(lastMonthDay < day){ //n个月前所在的总天数小于现在的天日期 33 endDate = year + "/" + (month - num) + "/" + lastMonthDay; 34 }else{ 35 endDate = year + "/" + (month - num) + "/" + day; 36 } 37 } 38 endDate = new Date(endDate); 39 } 40 endDate.setDate(endDate.getDate() + 1); //最开始的那天也算一天,所以整体需要减掉1天; 41 dateObj.last = endDate; 42 // 开始时间和结束时间的总的时间天数,+1 是因为本身的那天也算一天 43 dateObj.temp = (dateObj.now.getTime() - dateObj.last.getTime()) / 24 / 60 / 60 / 1000 + 1; 44 return dateObj; 45 }
使用的时候如下:
1 var a = getDateTime(15,"day","2021/3/9"); //2021年3月9日开始 2 var b = getDateTime(7,"month"); //当天开始