js计算某天一周的日期及一周前、一周后

 // 点击今天
        clickToday() {
            var date = new Date()
            var year = date.getFullYear()
            var month = date.getMonth()
            var day = date.getDate()
            this.nowDate = year+'-'+month+'-'+day
            // this.getDateRange(new Date(year,month,day))
        },
        // 点击上一周
        beforeWeek() {
            var date = this.nowDate.split('-')
            // 判断是否为今天,是返回true,不再向前
            if(this.checkIsToday(date)) {
                return 
            }
            var year = parseInt(date[0])
            var month = parseInt(date[1])
            var day = parseInt(date[2])
            // 当前日期向前推七天
            if(day-7 >= 1) {// 七天后和当前日期同年同月
                day = day-7
            }else {
                if(month - 1 >= 0) {// 七天后和当前日期同年不同月
                    month--
                    var monthDays = new Date(year,month+1,0).getDate()
                    // console.log("dddd:",monthDays,day)
                    day = monthDays - (7 - day)
                }else {// 七天前和当前日期不同年不同月
                    month = 11
                    year--
                    var monthDays = new Date(year,month,0).getDate()
                    day = monthDays - (7 - day)+1
                }
            }
            this.nowDate = year+'-'+month+'-'+day

        },
        // 点击下一周
        afterWeek() {
            var date = this.nowDate.split('-')
            var year = parseInt(date[0])
            var month = parseInt(date[1])
            var day = parseInt(date[2])
            // 当前日期向后推七天
            var monthDays = new Date(year,(month+1),0).getDate()
            // console.log("kkkk:",monthDays,year,month,day)
            if(day+7 <= monthDays ) {// 七天后和当前日期同年同月
                day = day+7
            }else {// 七天后和当前日期同年不同月
                if(month+1 < 12) {
                    month++
                    day = 7-(monthDays - day)
                }else {// 七天后和当前日期不同年不同月
                    month = 0
                    year++
                    day = 7-(monthDays - day)
                }
            }
            this.nowDate = year+'-'+month+'-'+day
        },
        // 获取某日期所处一周的日期范围
        getDateRange(date) {
        //    var date = new Date(dateStr)
           var year = date.getFullYear()
           var month = date.getMonth()+1
           var day = date.getDate()
           var week = date.getDay()
           if(week == 0) {
               week = 7
           }
            // 今天到本周第一天间隔多少天
           var start = week-1
           if(day - start >= 1) { // 若本周第一天和当天同月
                for(var i = 0;i<=start; i++) {
                    this.dateRange[i] = this.changeDateFormat(year,month,(day-start+i),'/')
                }
                
               this.startDate = this.changeDateFormat(year,month,(day-start),'/')
           }else{
               if(month -1 >= 1) {// 本周第一天和当天不同月但同年
                   // 计算某月有多少天
                   var startMonth = month - 1
                   var monthDays = new Date(year,startMonth,0).getDate()
                   var starDay = monthDays - (week - day)+1
                   for(var i=0;i<=start;i++) {
                       if(day-start+i < 1) {
                           this.dateRange[i] = this.changeDateFormat(year,startMonth,monthDays - (week - day)+1+i,'/')
                       }else {
                           this.dateRange[i] = this.changeDateFormat(year,month,(day-start+i),'/')
                       }
                   }
                   this.startDate = this.changeDateFormat(year,startMonth,starDay,'/')
               }else {// 本周第一天和当天不同月不同年
                //    month = 12
                //    year--
                    var startYear = year - 1 
                    var monthDays = new Date(startYear,12,0).getDate()
                    var starDay = monthDays - (week - day)+1
                    for(var i=0;i<=start;i++) {
                        if(day-start+i < 1) {
                            this.dateRange[i] = this.changeDateFormat(startYear,12,monthDays - (week - day)+1+i,'/')
                        }else {
                            this.dateRange[i] = this.changeDateFormat(year,month,(day-start+i),'/')
                        }
                    }
                    this.startDate = this.changeDateFormat(startYear,12,starDay,'/')
               }
               
           }

           // 今天到本周最后一天间隔多少天
           var end = 7 - week
           var monthDays = new Date(year,month,0).getDate()
           if(day + end <= monthDays) {
               for(var i=0 ; i<end ; i++) {
                   this.dateRange[start+1+i] = this.changeDateFormat(year,month,(day+i+1),'/')
               }
               this.endDate = this.changeDateFormat(year,month,(day+end),'/')
           }else {
               if(month + 1 <= 12 ) {
                    // month++
                    var endMonth = month + 1
                    var endDay = end-(monthDays - day)
                    for(var i=0 ; i<end ; i++) {
                        if(day+i+1 > monthDays) { // 在下月的天数
                            this.dateRange[start+1+i] = this.changeDateFormat(year,endMonth,(day+i+1-monthDays),'/')
                        }else {// 在本月的天数
                            this.dateRange[start+1+i] = this.changeDateFormat(year,month,(day+i+1),'/')
                        }
                        
                    }
                    this.endDate = this.changeDateFormat(year,endMonth,endDay,'/')
               }else {
                //    month = 1
                //    year++
                    var endYear = year + 1
                    var endDay = end-(monthDays - day)
                    for(var i =0; i< end;i++) {
                        if(day+i+1 > monthDays) { // 在下月的天数
                            this.dateRange[start+1+i] = this.changeDateFormat(endYear,1,(day+i+1-monthDays),'/')
                        }else {// 在本月的天数
                            this.dateRange[start+1+i] = this.changeDateFormat(year,month,(day+i+1),'/')
                        }
                    }
                    
                    
                    this.endDate = this.changeDateFormat(endYear,1,endDay,'/')
               }
           }
            
        },
        
        // 转换数字
        changeNum(num) {
            if(num >= 10) {
                return num
            }else {
                return '0'+num
            }
        },
        // 转换日期格式
        changeDateFormat(year,month,day,str) {
            return year+str+this.changeNum(month)+str+this.changeNum(day)
        },

 更简单的方法可查看   https://www.cnblogs.com/pyx-blog/p/14812598.html

posted @ 2020-09-24 13:58  pyx204  阅读(574)  评论(0)    收藏  举报