我有一個計算傳遞,並增加給定天數的結果保證了輸出的日期不落在週末日期的功能。工作日的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
鑑於上面的功能有人可以幫助我修改功能,以考慮這些日期。
拳擊日是同一天,聖誕節嗎?!? – 2015-02-24 20:39:06
我可能會把你所有的禁止日子都放到字典上。然後,當你計算一個新的日期檢查,看看它是否在你的字典中。如果是,則添加1天並再次通過函數傳遞(遞歸),因爲如果聖誕節在星期五發生,再增加一天不會削減它。 – 2015-02-24 20:41:32
@MattBurland好景點 – 2015-02-24 20:44:21