我需要一个 Date.prototype.addBusDays 函数
这将采用一个整数作为添加到日期的工作日数。
但是,有两个考虑因素:1.周末,2.假期(我想这是一个要比较的预设数组。如果开始日期和结束日期包含 3 个假期,那么您将结束日期推出 3)
我在网上遇到了一些脚本,我能想到的一个困境是,假设你先处理所有周末,然后处理假期,如果你+1天(由于假期),并且你的结束日期被推到了怎么办?又是一个周末...
有任何想法吗?
谢谢!
EDIT:
这是我正在开发的日程安排工具的一部分,这意味着日期将与链接在一起的任务相关联。向任务添加 1 天,将触发与其相关的所有内容的重新计算,可能是数据库中的所有日期。
Datageek 的解决方案对我有所帮助,但我需要对其进行增强。这仍然不处理假期,但确实处理工作日,可以选择包括周六和/或周日,并且支持添加负数天数:-
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.setTime(datStartDate.getTime() + (new Number((~~((lngNumberOfWorkingDays + intOffset) / intWorkingDays) * intNonWorkingDays) + lngNumberOfWorkingDays + intModifier)*86400000));
return newDate;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)