如何获得今天-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
%>
答案 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