<script> function getD(date1,date2){ date1 = date1.replace(/-/g,"\/"); date2 = date2.replace(/-/g,"\/"); var d1 = new Date(date1); var d2 = new Date(date2); var day1 = d1.getDay(); var days = (d2.getTime()-d1.getTime())/24/60/60/1000; if(days%7==0){ if(d1.getDay()==6||d1.getDay()==0){ return parseInt(days/7)*2+1; }else{ return parseInt(days/7)*2; } }else{ var total = 0; do{ if(d1.getDay()==6||d1.getDay()==0){ total++; } d1.setTime(d1.getTime()+24*60*60*1000); }while(d1.getDay()!=d2.getDay()); if(d1.getDay()==6||d1.getDay()==0){ return total+parseInt(days/7)*2+1; }else{ return total+parseInt(days/7)*2; } } }var date1="2009-7-1"; var date2="2009-7-18"; alert(getD(date1,date2)); </script>
<script> function getDays(BeginDate,EndDate){ var Begin = new Date(); var BeginDates=BeginDate.split("-") Begin.setFullYear(BeginDates[0],BeginDates[1]-1,BeginDates[2]); var End = new Date(); var EndDates=EndDate.split("-") End.setFullYear(EndDates[0],EndDates[1]-1,EndDates[2]); var d=new Date(); var num=0; for(d=Begin;d<=End;d.setDate(d.getDate()+1)){ if(d.getDay()==0||d.getDay()==6){ //alert(d.getDay()+","+d); num++; } } alert(num); } getDays("2009-7-1","2009-7-18") </script>
<script> var totalDay; function Dayminus(date1,date2){ loinStart = date1.split("-"); loinEnd = date2.split("-"); var loStart = new Date(loinStart[0],loinStart[1]-1,loinStart[2],0,0,0,0); var loEnd = new Date(loinEnd[0],loinEnd[1]-1,loinEnd[2],0,0,0,0); totalDay = (loEnd.getTime()-loStart.getTime())/(1000*24*3600); alert(totalDay); } </script>
<script> function getDays(BeginDate,EndDate){ BeginDate = BeginDate.replace(/-/g,"\/"); EndDate = EndDate.replace(/-/g,"\/"); var Begin = new Date(BeginDate); var End = new Date(EndDate); var d=new Date(); var num=0; for(d=Begin;d<=End;d.setDate(d.getDate()+1)){ if(d.getDay()==0||d.getDay()==6){ alert(d.getDay()+","+d); num++; } } alert(num); } getDays("2009-7-1","2009-7-18") </script>
1. lihui_shine 的算法时间复杂度是常数, 不足之处是: 1) 可读性不好, 2) 没有验证参数 2. wuwu8ku 的算法时间复杂度是相差天数的N的函数. 3. ouwarmth 的算法经过测试不正确.付上我的算法, 时间复杂度是常数.function GetWeekendsDays(startDay, endDay) { var startDate = new Date(startDay.replace(/-/g, "/")); var endDate = new Date(endDay.replace(/-/g, "/")); if (endDate < startDate) { return 0; }
var retval = 0; startDate.setDate(startDate.getDate() + (6 - startDate.getDay() ) % 6); // Begin with Sunday if (0 == startDate.getDay()) { retval -= 1; startDate.setDate(startDate.getDate() - 1); } var durationDays = Math.floor( (endDate.getTime() - startDate.getTime() ) / 24 / 60 / 60 / 1000); retval += 2 * (Math.floor(durationDays / 7) + 1); // End with Saturday if (0 == (durationDays % 7) ) { retval -= 1; } return retval; }
date1 = date1.replace(/-/g,"\/");
date2 = date2.replace(/-/g,"\/");
var d1 = new Date(date1);
var d2 = new Date(date2);
var day1 = d1.getDay();
var days = (d2.getTime()-d1.getTime())/24/60/60/1000;
if(days%7==0){
if(d1.getDay()==6||d1.getDay()==0){
return parseInt(days/7)*2+1;
}else{
return parseInt(days/7)*2;
}
}else{
var total = 0;
do{
if(d1.getDay()==6||d1.getDay()==0){
total++;
}
d1.setTime(d1.getTime()+24*60*60*1000);
}while(d1.getDay()!=d2.getDay());
if(d1.getDay()==6||d1.getDay()==0){
return total+parseInt(days/7)*2+1;
}else{
return total+parseInt(days/7)*2;
}
}
}var date1="2009-7-1";
var date2="2009-7-18";
alert(getD(date1,date2));
</script>
<script>
function getDays(BeginDate,EndDate){
var Begin = new Date();
var BeginDates=BeginDate.split("-")
Begin.setFullYear(BeginDates[0],BeginDates[1]-1,BeginDates[2]);
var End = new Date();
var EndDates=EndDate.split("-")
End.setFullYear(EndDates[0],EndDates[1]-1,EndDates[2]);
var d=new Date();
var num=0;
for(d=Begin;d<=End;d.setDate(d.getDate()+1)){
if(d.getDay()==0||d.getDay()==6){
//alert(d.getDay()+","+d);
num++;
}
}
alert(num);
}
getDays("2009-7-1","2009-7-18")
</script>
var totalDay;
function Dayminus(date1,date2){
loinStart = date1.split("-");
loinEnd = date2.split("-");
var loStart = new Date(loinStart[0],loinStart[1]-1,loinStart[2],0,0,0,0);
var loEnd = new Date(loinEnd[0],loinEnd[1]-1,loinEnd[2],0,0,0,0);
totalDay = (loEnd.getTime()-loStart.getTime())/(1000*24*3600);
alert(totalDay);
}
</script>
<script>
function getDays(BeginDate,EndDate){
BeginDate = BeginDate.replace(/-/g,"\/");
EndDate = EndDate.replace(/-/g,"\/");
var Begin = new Date(BeginDate);
var End = new Date(EndDate);
var d=new Date();
var num=0;
for(d=Begin;d<=End;d.setDate(d.getDate()+1)){
if(d.getDay()==0||d.getDay()==6){
alert(d.getDay()+","+d);
num++;
}
}
alert(num);
}
getDays("2009-7-1","2009-7-18")
</script>
2. wuwu8ku 的算法时间复杂度是相差天数的N的函数.
3. ouwarmth 的算法经过测试不正确.付上我的算法, 时间复杂度是常数.function GetWeekendsDays(startDay, endDay)
{
var startDate = new Date(startDay.replace(/-/g, "/"));
var endDate = new Date(endDay.replace(/-/g, "/")); if (endDate < startDate)
{
return 0;
}
var retval = 0; startDate.setDate(startDate.getDate() + (6 - startDate.getDay() ) % 6); // Begin with Sunday
if (0 == startDate.getDay())
{
retval -= 1;
startDate.setDate(startDate.getDate() - 1);
} var durationDays = Math.floor( (endDate.getTime() - startDate.getTime() ) / 24 / 60 / 60 / 1000); retval += 2 * (Math.floor(durationDays / 7) + 1); // End with Saturday
if (0 == (durationDays % 7) )
{
retval -= 1;
} return retval;
}