2015-09-05 64 views
4

繼從this question其計算指定日期範圍內特定的工作日數:計算具體平日使用這種排除假期在Javascript

function countCertainDays(days, d0, d1) { 
    var ndays = 1 + Math.round((d1-d0)/(24*3600*1000)); 
    var sum = function(a,b) { 
     return a + Math.floor((ndays + (d0.getDay()+6-b) % 7)/7); 
    }; 
    return days.reduce(sum,0); 
} 

我想也知道假期怎麼能如果在星期幾的範圍內,假設我在d0d1之間發生了一系列假期,那麼排除它們。

感謝幫助!

回答

0

我結束了假期計算落在工作日數,然後根據原稿功能產生的結果差分它。這有額外的好處,讓我打開或關閉計算。

var holidays=[x,y,z] 
//where x,y and z are weekday numbers falling in the date range (obtained using something like .isBetween) 
var desired_weekdays=[a,b] 

var falling_on_weekdays= function(holidays,desired_weekdays){ 
    for (var i=0; i < holidays.length; i++) { 
     if ($.inArray(holidays[i],desired_weekdays)==0){ 
      count++} 
     } 
    } 
}; 

則:

if($('.#checkbox').prop("checked")===true){ 
      return days.reduce(sum,0);    
     } 
     else { 
      return days.reduce(sum,0)-falling_on_weekdays; 
     } 
1

前一段時間我寫了類似的腳本,也許它會幫助你:

var today = new Date(); 
var end = new Date(2016, 6, 1); 
var allDays = Math.floor((end.getTime() - today.getTime())/ 86400000); 
var holidays = [ 
    [15, 8],[1, 10],[17, 10],[29,9],[30,9],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,11],[31,11],[1,0],[2,0], [3,0],[4,0],[5,0],[6,0],[7,0],[1,1],[31,0],[22,1],[23,1],[24,1],[25,1],[26,1],[24,2],[25,2],[26,2],[27,2],[28,2],[29,2],[1,4],[8,4], 
    ]; 

var days = 0; 
    for(var i = 0; i < allDays; i++){ 
    var tmpDate = new Date(); 
    tmpDate.setTime(today.getTime() + i * 24*60*60*1000); 
    var bool = true; 
    for(var j = 0; j < holidays.length; j++){ 
     if(tmpDate.getDate() == holidays[j][0] && tmpDate.getMonth() == holidays[j][1]) 
      bool = false; 
    } 
    if(tmpDate.getDay() != 0 && tmpDate.getDay() != 6 && bool) 
     days++; 
} 
console.log(days);