之前做一段功能使用echarts图表有一个按周的统计功能。
获取一段时间的按天的按月的都相对比较简单,按周的稍微有点难度;
按天的封装
// 获取两个日期之间所有的日期(YYYY-MM-DD)
//start,开始时间
//end,结束时间
// result 时间差的日期 array
export function getdateTimePhase(start,end){
var result = [];
if(start === end){
result = start;
return result;
}
var beginDay = start.split("-");
var endDay = end.split("-");
var diffDay = new Date();
var dateList = new Array;
var i = 0;
diffDay.setDate(beginDay[2]);
diffDay.setMonth(beginDay[1]-1);
diffDay.setFullYear(beginDay[0]);
result.push(start);
while(i == 0){
var countDay = diffDay.getTime() + 24 * 60 * 60 * 1000;
diffDay.setTime(countDay);
dateList[2] = diffDay.getDate();
dateList[1] = diffDay.getMonth() + 1;
dateList[0] = diffDay.getFullYear();
if(String(dateList[1]).length == 1){dateList[1] = "0"+dateList[1]};
if(String(dateList[2]).length == 1){dateList[2] = "0"+dateList[2]};
result.push(dateList[0]+"-"+dateList[1]+"-"+dateList[2]);
if(dateList[0] == endDay[0] && dateList[1] == endDay[1] && dateList[2] == endDay[2]){ i = 1;
}
};
return result;
}
按月:
//start 开始时间 格式(yyyy-MM-dd)
//end 结束时间 格式(yyyy-MM-dd)
//retrun [array]
// 获取一段时间内的月份
export function getMonthBetween(start,end){
var result = [];
var s = start.split("-");
var e = end.split("-");
var min = new Date();
var max = new Date();
min.setFullYear(s[0],s[1]);
max.setFullYear(e[0],e[1]);
var curr = min;
while(curr <= max){
var month = curr.getMonth();
var str=curr.getFullYear()+"-"+(month);
var s=curr.getFullYear()+"-0";
if(str==s){
str=curr.getFullYear()+"-12";
}
result.push(str);
curr.setMonth(month+1);
}
var arr = []
var newArr = []
for(var i=0;i<result.length;i++){
arr.push(result[i].split('-'))
}
for(var i=0;i<arr.length;i++){
if (arr[i][1]==="12") {
arr[i][0] = arr[i][0]-1
}
}
for(var i = 0;i<arr.length;i++){
newArr.push(arr[i][0]+'-'+arr[i][1])
}
for(let i=0;i<newArr.length;i++){
if(newArr[i].length === 6){
newArr[i]= newArr[i].slice(0, 5) + '0' + newArr[i].slice(5);
}
}
return newArr;
};
按周:
因为按周的有点例外,开始时间需要处理一下,必须是周日的时间日期
//获取一段时间的每周(按周)
// time 开始时间(已经过处理)
//end 结束时间
// retrun Array;['2019-04-22~2019-04-28','2019-04-29~2019-05-05']
export function getWeek(time,end){
let begin='';
begin+=time.getFullYear()+'-'; // 获取年份。
begin+=(time.getMonth()+1)+"-"; // 获取月份。
begin+= time.getDate();
Date.prototype.format=function (){
let yyyy=this.getFullYear(); // 获取年份。
let MM=(this.getMonth()+1);
let dd = this.getDate();
if(MM<10){
MM ='0'+MM
}
if(dd<10){
dd ='0'+dd
}
let s=yyyy+'-'+MM+'-'+dd;
return(s);
}
var dateAllArr = new Array();
var ab = begin.split("-");
var ae = end.split("-");
var db = new Date();
db.setUTCFullYear(ab[0], ab[1]-1, ab[2]);
var de = new Date();
de.setUTCFullYear(ae[0], ae[1]-1, ae[2]);
var unixDb=db.getTime();
var unixDe=de.getTime();
for(var k=unixDb;k<=unixDe;){
// 周一至周日的字符串push
dateAllArr.push((new Date(parseInt(k))).format().toString()+'~'+(new Date(parseInt(k+6*24*60*60*1000))).format().toString());
k=k+7*24*60*60*1000;
}
return dateAllArr;
}
处理的开始时间的函数封装
// 将一个起始日期经过过滤拿到当周的周一返回
// start 起始日期;
export function judgeStart(start){
let startTime = new Date(start);
let oweek =startTime.getDay();
let mSeconds = startTime.getTime();
switch(oweek){
case 0:
return mSeconds-6*24*60*60*1000;
break;
case 1:
return mSeconds;
break;
case 2:
return mSeconds-1*24*60*60*1000;
break;
case 3:
return mSeconds-2*24*60*60*1000;
break;
case 4:
return mSeconds-3*24*60*60*1000;
break;
case 5:
return mSeconds-4*24*60*60*1000;
break;
case 6:
return mSeconds-5*24*60*60*1000;
break;
}
}
使用demo
import {getWeekAll,judgeStart} from '@/utils/getTime'
let begin =new Date(judgeStart(this.quantum[0]));
let getWeekList = getWeek(begin,end)
//getWeekList 得到周一到周日的数组格式
在这里插入代码片
一些格式大家参考一下,根据自身需求更改。
写的不好,有大神看到觉得哪里需要改善的欢迎附上代码大家一起学习进步!