我想统计两个时间之间有多少个休息日,高手指点下假如
var date1="2009-7-1";
var date2="2009-7-18";
统计这两个时间之间有多少个休息日。。急 在线等!!

解决方案 »

  1.   

    <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>
      

  2.   


    <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>
      

  3.   

    <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>   
     
      

  4.   


    <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>
      

  5.   

    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;
    }