【问题标题】:Get today -2 (skipping weekend)今天获取-2(跳过周末)
【发布时间】:2017-04-04 15:34:45
【问题描述】:

我怎样才能得到今天 -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
%>

【问题讨论】:

  • 来吧...你试过什么?

标签: date vbscript


【解决方案1】:

要获得您想要的结果,您需要在星期六减去 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 表示所有其他日子。

【讨论】:

    【解决方案2】:

    这对于您的需要可能有点过头了,但我在脚本中使用了两个例程来增加或减少工作日,同时考虑周末和节假日。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      相关资源
      最近更新 更多