Vbscript 现在增加3天或5天,周末除外

Vbscript 现在增加3天或5天,周末除外,vbscript,dateadd,Vbscript,Dateadd,我想知道未来的日期,从现在起的3天和5天。不包括周末 示例:今天=2013年3月19日,3天=2013年3月24日,5天=2013年3月26日 下面的代码可以工作5-7天,但我无法在3-5个工作日内返工 dim strToday, businessDays5, businessDays7 strToday = date select case WeekDay( strToday ) case 1 '-- Sunday businessDays5 = 5 businessDays7 =

我想知道未来的日期,从现在起的3天和5天。不包括周末

示例:今天=2013年3月19日,3天=2013年3月24日,5天=2013年3月26日 下面的代码可以工作5-7天,但我无法在3-5个工作日内返工

dim strToday, businessDays5, businessDays7
strToday = date
select case WeekDay( strToday )
case 1     '-- Sunday
businessDays5 = 5 
businessDays7 = 9
case 2, 3, 4     '-- Monday - Wednesday
businessDays5 = 7
businessDays7 = 9
case 5, 6    '-- Thursday - Friday
businessDays5 = 7
businessDays7 = 11
case 7     '-- Saturday
businessDays5 = 6
businessDays7 = 10
end select
strFive = DateAdd( "d", businessDays5, strToday )
strSeven = DateAdd( "d", businessDays7, strToday )

我每天创建一个案例。它应该给出你想要的结果

(编辑:我更改了结果,因此它被添加到当前日期,而不是一周的第一天。这要归功于@Goose谁抓住了我的错误!)


此通用函数返回从给定日期开始的日期请求天数,跳过周六和周日。有关如何调用它的示例,请参见下面的
Test()

Function AddDaysSkipWeekends(d As Date, days As Integer) As Date
    While days > 0
        If Weekday(d) > 1 And Weekday(d) < 7 Then 'Monday to Friday
            days = days - 1
        End If
        d = DateAdd("d", 1, d)
    End While
    Return d
End Function

Sub Test()
    MsgBox(AddDaysSkipWeekends(Today(), 3))
    MsgBox(AddDaysSkipWeekends(Today(), 5))
End Sub
函数AddDaysSkipWeekends(d为日期,天数为整数)为日期
而天数>0
如果工作日(d)>1且工作日(d)<7,则“周一至周五”
天=天-1
如果结束
d=日期添加(“d”,1,d)
结束时
返回d
端函数
子测试()
MsgBox(AddDaysSkipWeekends(Today(),3))
MsgBox(AddDaysSkipWeekends(Today(),5))
端接头
使用此功能:

Function addDays_WithoutWeekend(Dateinput As Date, NumofDays As Integer) As Date
Do Until NumofDays = 0
Dateinput = Dateinput.AddDays(1)
If Dateinput.DayOfWeek <> DayOfWeek.Saturday And Dateinput.DayOfWeek <> DayOfWeek.Sunday Then
NumofDays = NumofDays - 1
End If
Loop
Return Dateinput
End Function
函数addDays\u without weekend(Dateinput作为日期,NumofDays作为整数)作为日期
直到NumofDays=0为止
Dateinput=Dateinput.AddDays(1)
如果Dateinput.DayOfWeek DayOfWeek.Saturday和Dateinput.DayOfWeek DayOfWeek.Sunday,则
NumofDays=NumofDays-1
如果结束
环
返回日期输入
端函数

这是经过一些编辑后对我有用的东西

dim strToday, businessDays3, businessDays5
strToday = date

select case WeekDay( strToday )

case 1     '-- Sunday
businessDays3 = 3
businessDays5 = 5

case 2     '-- Monday
businessDays3 = 3
businessDays5 = 7

case 3     '-- Tuesday
businessDays3 = 3
businessDays5 = 7

case 4     '-- Wednesday
businessDays3 = 5
businessDays5 = 7

case 5    '-- Thursday
businessDays3 = 5
businessDays5 = 7

case 6    '-- Friday
businessDays3 = 5
businessDays5 = 7

case 7     '-- Saturday
businessDays3 = 4
businessDays5 = 6

end select

strFive = DateAdd( "d", businessDays3, strToday )
strSeven = DateAdd( "d", businessDays5, strToday )

这是什么语言?在经典asp中工作,VBScriptso谁得到了正确的答案?不幸的是,今天的日期显示为3天,5天相同。2014年3月28日。今天是星期三。从现在起的3天是星期六,所以这一天被转换为星期一。5天后是星期一。所以他们都是一样的。我理解错了吗?看起来您分配的值是从第1天开始添加的天数,而不是从今天开始。所以对于今天(星期三-4),我相信它实际上是3=5和5=7!正确的!我误解了原始代码。谢谢,鹅!我会更新我的答案。@Swagger Goose注意到我误解了您的原始代码,所以我修正了获得输出的数字。:)如果需要businessDays2或businessDays11,您再次进入字段1,可以开发新的常量。您的解决方案擅长于执行速度,而不是人工将其组合起来。开发人员通常首先优化人的可读性(他们的时间是最昂贵的因素),而速度/内存的优化只在关键情况下进行。
dim strToday, businessDays3, businessDays5
strToday = date

select case WeekDay( strToday )

case 1     '-- Sunday
businessDays3 = 3
businessDays5 = 5

case 2     '-- Monday
businessDays3 = 3
businessDays5 = 7

case 3     '-- Tuesday
businessDays3 = 3
businessDays5 = 7

case 4     '-- Wednesday
businessDays3 = 5
businessDays5 = 7

case 5    '-- Thursday
businessDays3 = 5
businessDays5 = 7

case 6    '-- Friday
businessDays3 = 5
businessDays5 = 7

case 7     '-- Saturday
businessDays3 = 4
businessDays5 = 6

end select

strFive = DateAdd( "d", businessDays3, strToday )
strSeven = DateAdd( "d", businessDays5, strToday )