2012-03-10 90 views
0

我想計算除假期[數組]之外的兩天之間的營業日。 This code helped計算工作日,但不排除假期:計算兩天之間的營業日應排除假期

<script> 
     function calcBusinessDays(dDate1, dDate2) { // input given as Date objects 
     var iWeeks, iDateDiff, iAdjust = 0; 
     if (dDate2 < dDate1) return -1; // error code if dates transposed 
     var iWeekday1 = dDate1.getDay(); // day of week 
     var iWeekday2 = dDate2.getDay(); 
     iWeekday1 = (iWeekday1 == 0) ? 7 : iWeekday1; // change Sunday from 0 to 7 
     iWeekday2 = (iWeekday2 == 0) ? 7 : iWeekday2; 
     if ((iWeekday1 > 5) && (iWeekday2 > 5)) iAdjust = 1; // adjustment if both days on weekend 
     iWeekday1 = (iWeekday1 > 5) ? 5 : iWeekday1; // only count weekdays 
     iWeekday2 = (iWeekday2 > 5) ? 5 : iWeekday2; 

     // calculate differnece in weeks (1000mS * 60sec * 60min * 24hrs * 7 days = 604800000) 
     iWeeks = Math.floor((dDate2.getTime() - dDate1.getTime())/604800000) 

     if (iWeekday1 <= iWeekday2) { 
      iDateDiff = (iWeeks * 5) + (iWeekday2 - iWeekday1) 
     } else { 
      iDateDiff = ((iWeeks + 1) * 5) - (iWeekday1 - iWeekday2) 
     } 

     iDateDiff -= iAdjust // take into account both days on weekend 

     return (iDateDiff + 1); // add 1 because dates are inclusive 
    } 
</script> 

假日列表:

natDays = [ 
    [1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'], 
    [4, 27, 'za'], [5, 25, 'ar'], [6, 6, 'se'], 
    [7, 4, 'us'], [8, 17, 'id'], [9, 7, 'br'], 
    [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke'] 
]; 

function nationalDays(date) { 
    for (i = 0; i < natDays.length; i++) { 
     if (date.getMonth() == natDays[i][0] - 1 
      && date.getDate() == natDays[i][1]) { 
     return [false, natDays[i][2] + '_day']; 
     } 
    } 
    return [true, '']; 
} 

回答