我需要一个Date.prototype.addBusDays函数,它将整数作为要添加到日期的工作日数.
但是,有两个注意事项:1.周末,2.假期(我想这将是一个预设数组来比较.如果开始日期和结束日期包含3个假期,那么你将结束日期推出3)
我在网上遇到过一些剧本,我可以想到的一个难题是,让我们说你先解决所有周末,然后你做假期,如果你+1天(由于假期),你的结束日期被推入再过一个周末... <
有任何想法吗?谢谢!
编辑:
这是我正在开发的调度工具的一部分,这意味着日期将与链接在一起的任务相关联.向任务添加1天将触发重新计算与其关联的所有内容,可能是数据库中的所有日期.
小智 6
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;
}
Run Code Online (Sandbox Code Playgroud)
看看下面的实现。来源自about.com
addWeekdays = function(date, dd) {
var wks = Math.floor(dd/5);
var dys = dd.mod(5);
var dy = this.getDay();
if (dy === 6 && dys > -1) {
if (dys === 0) {dys-=2; dy+=2;}
dys++; dy -= 6;
}
if (dy === 0 && dys < 1) {
if (dys === 0) {dys+=2; dy-=2;}
dys--; dy += 6;
}
if (dy + dys > 5) dys += 2;
if (dy + dys < 1) dys -= 2;
date.setDate(date.getDate()+wks*7+dys);
}
var date = new Date();
addWeekdays(date, 9);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6842 次 |
| 最近记录: |