2015-02-24 38 views
1

我有一個計算傳遞,並增加給定天數的結果保證了輸出的日期不落在週末日期的功能。工作日的Javascript額外日期

功能

function addWorkingDays(datStartDate, lngNumberOfWorkingDays, blnIncSat, blnIncSun) { 
    var intWorkingDays = 5; 
    var intNonWorkingDays = 2; 
    var intStartDay = datStartDate.getDay(); // 0=Sunday ... 6=Saturday 
    var intOffset; 
    var intModifier = 0; 

    if (blnIncSat) { intWorkingDays++; intNonWorkingDays--; } 
    if (blnIncSun) { intWorkingDays++; intNonWorkingDays--; } 
    var newDate = new Date(datStartDate) 
    if (lngNumberOfWorkingDays >= 0) { 
     // Moving Forward 
     if (!blnIncSat && blnIncSun) { 
      intOffset = intStartDay; 
     } else { 
      intOffset = intStartDay - 1; 
     } 
     // Special start Saturday rule for 5 day week 
     if (intStartDay == 6 && !blnIncSat && !blnIncSun) { 
      intOffset -= 6; 
      intModifier = 1; 
     } 
    } else { 
     // Moving Backward 
     if (blnIncSat && !blnIncSun) { 
      intOffset = intStartDay - 6; 
     } else { 
      intOffset = intStartDay - 5; 
     } 
     // Special start Sunday rule for 5 day week 
     if (intStartDay === 0 && !blnIncSat && !blnIncSun) { 
      intOffset++; 
      intModifier = 1; 
     } 
    } 
    // ~~ is used to achieve integer division for both positive and negative numbers 
    newDate.setDate(datStartDate.getDate() + new Number((~~((lngNumberOfWorkingDays + intOffset)/intWorkingDays) * intNonWorkingDays) + lngNumberOfWorkingDays + intModifier)); 
    return newDate; 
} 

我現在需要一些日期添加到該功能爲它考慮到,這些都是公衆假期在澳大利亞悉尼。我期待的是以下幾點。

var newDate = addWorkingDays('30/09/2015', 3, false, false);

在這個例子中,返回日期將落在03/10/2015這是一個公衆假期,因此我們需要在問題返回04/10/2015

日期是:

01/01/2015 New Year's Day 
26/01/2015 Australia Day 
09/03/2015 Labour Day/Eight Hours Day/Adelaide Cup/Canberra Day 
03/04/2015 Good Friday 
06/04/2015 Easter Monday 
25/04/2015 ANZAC Day 
08/06/2015 Queen's Birthday 
03/08/2015 Bank Holiday/Picnic Day 
05/10/2015 Labour Day 
03/11/2015 Melbourne Cup 
25/12/2015 Christmas Day 
26/12/2015 Boxing Day 

鑑於上面的功能有人可以幫助我修改功能,以考慮這些日期。

+0

拳擊日是同一天,聖誕節嗎?!? – 2015-02-24 20:39:06

+0

我可能會把你所有的禁止日子都放到字典上。然後,當你計算一個新的日期檢查,看看它是否在你的字典中。如果是,則添加1天並再次通過函數傳遞(遞歸),因爲如果聖誕節在星期五發生,再增加一天不會削減它。 – 2015-02-24 20:41:32

+0

@MattBurland好景點 – 2015-02-24 20:44:21

回答

1

因爲它是你的代碼給了我的錯誤,當我試着像您指定調用它,但無論你應該簡單地可以檢查,如果你打算給作爲回答日期是您的無效日期之一,如果是這樣,然後返回下一個工作日:

(僞)

newDate.setDate(datStartDate.getDate() + new Number((~~((lngNumberOfWorkingDays + intOffset)/intWorkingDays) * intNonWorkingDays) + lngNumberOfWorkingDays + intModifier)); 
if (newDate == "01/01/2015" || newDate == "26/01/2015" || ....) { 
    return addWorkingDays(newDate, 1, blnIncSat, blnIncSun); 
} 
else { 
    return newDate; 
} 
+0

解析的日期應該是一個日期對象,謝謝你的回答我會給它一個 – 2015-02-24 20:45:17

+0

我用這個 '''if(newDate == newYears || newDate == ausDay || newDate == labourDay || newDate ==聖週五|| newDate == easterMonday || newDate == anzacDay || newDate == queensBday || newDate == picnicDay || newDate == labourDay2 || newDate ==墨爾本杯|| newDate = = xmasDay || newDate ==節禮日){ 返回addWorkingDays(newDate,1,blnIncSat,blnIncSun); } 其他{ 回報newDate; }''' – 2015-02-24 20:56:32

+0

很高興它爲你工作! – 2015-02-24 20:58:57