将最近两年的时间按自然周分组
最近两年包括今年和去年一年,首先计算出这一段时间内的开始时间和结束时间
- 因为开始时间不一定是周一,结束时间也不一定是周天,那么先计算第一个周一,再计算最后一个周天(此处的第一个周一为开始时间所在周的周一,最后一个周末为最后一天所在周的上周周天,这个时间范围需要根据需求确认)
- 根据第一个周一,遍历出这段时间内的所有周一的日期
- 根据每个周的周一的日期计算出所在周的周日
// 对这两年的时间按周分组,包括今年
// start为这段时间内的开始时间,end为结束时间
getWeek(start,end){
let weekArr = new Array();
// 定义变量,存储所有周一
let allMonday = new Array();
// 第一步:先计算最近两年前的第一天所在周的周一,即第一个周一
let current = new Date(this.getStartMonday(start));
// 计算今天的上周周末的日期,即最后一个周末
end = new Date(this.getlastSunday(end));
// 第二步:(根据第一个周一和最后一个周末的)计算这段时间范围内的所有周一
while (current <= end) {
allMonday.push( current.toLocaleDateString() );
current.setDate(current.getDate() + 7);
}
console.log(allMonday)
// 第三步:根据每周的周一计算每周的周天,从而获取所有自然周的时间范围
for(let i=0;i<allMonday.length;i++){
// 根据每周的周一计算每周的周末
let week = this.getWeekInRange(allMonday[i]);
weekArr[i]=week;
}
this.weekRangeList = weekArr
return weekArr;
},
// 第三步:根据每周的周一计算所在周的周日,并返回这一周的时间范围(周一-周日)
getWeekInRange(everyMonday){
// 根据每周的周一计算所在周的周日
let everySun = this.getEverySunday(everyMonday)
return everyMonday+'-'+everySun
},
// 第一步中获取日期所在周的周一,也用于第二步
getStartMonday(date){
let now = new Date(date);
let nowTime = now.getTime() ;
// let day = now.getDay();
//此处获取日期时,如果不加|| 7,在日期为星期天时,所获取的周一和周天即下周的周一和周天
//获取的日期不准确,而加上|| 7则可以获取准确的日期
let day = now.getDay()|| 7;
let oneDayTime = 24*60*60*1000 ;
let MondayTime = nowTime - (day-1)*oneDayTime ;//显示周一
return new Date(MondayTime).toLocaleDateString();
},
// 第一步中获取日期的上周的周末
getlastSunday(date){
let now = new Date(date);
let nowTime = now.getTime() ;
// let day = now.getDay();
//此处获取日期时,如果不加|| 7,在日期为星期天时,所获取的周一和周天即下周的周一和周天
//获取的日期不准确,而加上|| 7则可以获取准确的日期
let day = now.getDay()|| 7;
let oneDayTime = 24*60*60*1000 ;
let SundayTime = nowTime - day*oneDayTime ;//显示周一
return new Date(SundayTime).toLocaleDateString();
},
// 用于第三步获取日期所在周的周日
getcurrSunday(date){
let now = new Date(date);
let nowTime = now.getTime() ;
// let day = now.getDay();
//此处获取日期时,如果不加|| 7,在日期为星期天时,所获取的周一和周天即下周的周一和周天
//获取的日期不准确,而加上|| 7则可以获取准确的日期
let day = now.getDay()|| 7;
let oneDayTime = 24*60*60*1000 ;
let currSundayTime = nowTime + (7-day)*oneDayTime ;//显示周一
return new Date(currSundayTime).toLocaleDateString();
},
还可以按以上思路稍加修改进行自然月、季度的分组