今天获得-2(跳过周末)

时间:2014-02-21 16:57:15

标签: date vbscript

如何获得今天-2天(从现在开始的最后2个工作日)?但是跳过周末?

  

示例#1:今天是2月25日,我想要2月21日

     

示例#2:今天是2月26日,我想要2月24日

PS:日期格式为DD / MM / YYYY

我有这个,但结果是前进的,我应该使用datediff还是什么?:

<%
Dim d

d = DateAdd("m", 1, Now)

d = "01/" & Month(d) & "/" & Year(d)
d = DateAdd("d", -1, d)

If Weekday(d) = 7 Then
    d = DateAdd("d", -1, d)
ElseIf Weekday(d) = 1 Then
    d = DateAdd("d", -2, d)
End If

Response.Write "Day: " & d
%>

2 个答案:

答案 0 :(得分:3)

要获得所需的结果,您需要在星期六减去3天,在星期日和星期一减去4天,在所有其他日子减去2天。这可以通过以下方式实现:

today = Now
num   = Weekday(today, vbWednesday)

d = today - (2 + num\5 + num\6)

response.write "Two working days back: " & d

Weekday函数返回每个工作日的数值。通过基于星期三的星期,您可以计算需要使用整数除法从当前日期中减去的额外天数:

  • num\5在星期六,星期日和星期一返回1,否则返回0。
  • num\6在周日和周一返回1,否则返回0.

因此,术语2 + num\5 + num\6在星期六变为3,星期日和星期一变为4,其他所有日变为2。

答案 1 :(得分:0)

这对你所需要的东西来说可能有点过分,但这里有两个我在脚本中使用的例程,用于在考虑周末和假期时添加或减去工作日。

Function AddWorkingDays(dtStart, intDays)

    ' Start/Default case...
    AddWorkingDays = CDate(dtStart) 

    ' If positive days, step forward, otherwise step backward...
    Dim intStep, intCount
    If intDays > 0 Then intStep = 1 Else intStep = -1

    Do While intCount <> intDays
        AddWorkingDays = AddWorkingDays + intStep
        If IsValidDate(AddWorkingDays) Then intCount = intCount + intStep
    Loop

End Function

Function IsValidDate(d)

    Dim intWeekday, intMonth, intDay
    intWeekday = Weekday(d)
    intMonth = Month(d)
    intDay = Day(d)

    ' Weekend dates are not acceptable...
    If intWeekday = vbSaturday Or intWeekday = vbSunday Then Exit Function

    ' Holidays are also not acceptable...
    If intMonth = 01 Then If intDay = 01 Then Exit Function ' New Year's Day
    If intMonth = 07 Then If intDay = 04 Then Exit Function ' Independence Day
    If intMonth = 12 Then If intDay = 25 Then Exit Function ' Christmas Day

    ' Memorial Day is the last Monday in May...
    If intWeekday = vbMonday Then If intMonth = 05 Then If intDay >= 25 Then Exit Function

    ' ... (Thanksgiving, others) ...

    ' All tests passed. Date is a valid workday...
    IsValidDate = True

End Function