步骤如下:
1.计算开始日期是星期几
2.算出二个日期间的天数days
3.days/7为星期一~星期日的原始数
4.days%7例:5/4是星期日,到5/31各有多少个星期一~星期日
days=5/30-5/4+1=27;//相隔27天
weeks=27/7=3;//3个星期一到星期日
day=27%7=6;//星期日、星期一、星期二、星期三、星期四、星期五6天(5/4是星期日,从这天开始算)
故:星期日、一、二、三、四、五有3+1=4天;星期六有3天
1.计算开始日期是星期几
2.算出二个日期间的天数days
3.days/7为星期一~星期日的原始数
4.days%7例:5/4是星期日,到5/31各有多少个星期一~星期日
days=5/30-5/4+1=27;//相隔27天
weeks=27/7=3;//3个星期一到星期日
day=27%7=6;//星期日、星期一、星期二、星期三、星期四、星期五6天(5/4是星期日,从这天开始算)
故:星期日、一、二、三、四、五有3+1=4天;星期六有3天
/**
*计算二个日期间有几个星期一到星期日
*date_sta及date_end需是Date型参数
*/
function getWeekDays(date_sta,date_end){
if(!(date_sta instanceof Date)||!(date_end instanceof Date)){
throw new TypeError("传入参数必须是Date类型");
}
if(date_sta>date_end){//date_sta必须比date_end小
var temp=date_sta;
date_sta=date_end;
date_end=temp;
}
var days=(date_end-date_sta)/1000/60/60/24+1;//二个日期相关得到毫毛数
var sta_week_day=date_sta.getDay();//返回星期几(星期日为0,星期一为1...星期六为6
var weeks=Math.floor(days/7);
var day=days%7;
var weekday=[];
weekday[0]=weekday[1]=weekday[2]=weekday[3]=weekday[4]=weekday[5]=weekday[6]=weeks;
for(var i=0;i<day;i++){
var n=(sta_week_day+i)%7;
weekday[n]++;
}
return {
Sun:weekday[0],
Mon:weekday[1],
Tues:weekday[2],
Wed:weekday[3],
Thur:weekday[4],
Fri:weekday[5],
Sat:weekday[6]
};
}
调用示例:getWeekDays(new Date("2014/5/4"),new Date("2014/5/30"));
结果:{Fri: 4,Mon: 4,Sat: 3,Sun: 4,Thur: 4,Tues: 4,Wed: 4}
var a = new Date(sta.replace(/-/g,'/')),b = new Date(end.replace(/-/g,'/')), y, m, d,w=[0,0,0,0,0,0,0];
while(a<=b){
w[a.getDay()]++;
a.setDate(a.getDate()+1);//第二天
}
return {"日":w[0],"一":w[1],"二":w[2],"三":w[3],"四":w[4],"五":w[5],"六":w[6]}
}
console.log(getWeek("2014-5-4","2014-5-10"));