0

我有这个字符串,它是一个称为日期的strRDate字符串和另一个称为strColor. 截止日期是这周的星期一。

我想成为这样的人:

'// strRDate format is MM/DD/YYYY

Dim strRDate,strColor
strRDate="1/1/1999"
strColor="none"   

 If strRDate is this weeks Monday or older then  <-- HOW DO I DO THIS ???
    strColor="green"
    else 
    strColor="red"
    end if

所以任何早于 2013 年 10 月 21 日的东西都是绿色的,否则它会是红色的。

4

3 回答 3

2
' for successful parsing of mm/dd/yyyy dates (1033 is EN_US)
Response.LCID = 1033

Dim strRDate, strColor

strRDate = "10/21/2013"
strColor = GetColor(ParseDate(strRDate))

和一些辅助功能:

Function GetColor(d) 
    GetColor = "none"

    If IsDate(d) Then
        If d <= GetMondayForWeek(Now()) Then
            GetColor = "green"
        Else
            GetColor = "red"
        End If
    End If
End Function

Function ParseDate(strDate)
    ParseDate = vbEmpty
    If IsDate(strDate) Then
        ParseDate = CDate(strDate)
    End If
End Function

Function GetMondayForWeek(d)
    ' midnight
    GetMondayForWeek = CDate(Fix(d))

    While Weekday(GetMondayForWeek) <> vbMonday
      GetMondayForWeek = GetMondayForWeek - 1 
    Wend
End Function
于 2013-10-22T18:01:16.887 回答
1

我可能会这样计算:

strRDate = "1/1/1999"
strColor = "none"

monday = Date - (Weekday(Date, vbMonday) - 1)

If CDate(strRDate) <= monday Then
  strColor="green"
Else 
  strColor="red"
End If

Weekday(Date, vbMonday)为一周中的每一天返回一个介于 1 和 7 之间的值,其中星期一是第一天:

Monday    → 1
Tuesday   → 2
Wednesday → 3
Thursday  → 4
Friday    → 5
Saturday  → 6
Sunday    → 7

从函数的返回值中减去 1,您将得到当前日期和最近的星期一之间的天数差。从当前日期中减去该差异,您可以得到最近星期一的日期,然后您可以将其与输入日期进行比较(使用该CDate函数将字符串转换为实际日期)。

于 2013-10-22T21:46:13.293 回答
0

该日期的星期一可以通过减去 Weekday() 并针对星期一的工作日进行调整来计算:

  WScript.Echo "german locate (dd.mm.yyyy):"
  Dim dtCur : dtCur = #10/10/2013#
  Do Until dtCur > #10/24/2013#
     Dim dtThisMonday      : dtThisMonday      = DateAdd("d", -WeekDay(dtCur) + 2, dtCur)
     Dim isAfterThisMonday : isAfterThisMonday = dtCur > dtThisMonday
     WScript.Echo dtCur, WeekDay(dtCur), WeekdayName(WeekDay(dtCur), True), dtThisMonday, CStr(isAfterThisMonday)
     dtCur = DateAdd("d", 1, dtCur)
  Loop

输出:

german locate (dd.mm.yyyy):
10.10.2013 5 Thu 07.10.2013 True
11.10.2013 6 Fri 07.10.2013 True
12.10.2013 7 Sat 07.10.2013 True
13.10.2013 1 Sun 14.10.2013 False
14.10.2013 2 Mon 14.10.2013 False
15.10.2013 3 Tue 14.10.2013 True
16.10.2013 4 Wed 14.10.2013 True
17.10.2013 5 Thu 14.10.2013 True
18.10.2013 6 Fri 14.10.2013 True
19.10.2013 7 Sat 14.10.2013 True
20.10.2013 1 Sun 21.10.2013 False
21.10.2013 2 Mon 21.10.2013 False
22.10.2013 3 Tue 21.10.2013 True
23.10.2013 4 Wed 21.10.2013 True
24.10.2013 5 Thu 21.10.2013 True
于 2013-10-22T18:13:31.150 回答