Использование Datediff для поиска значений диапазона

Как я могу закодировать приведенное ниже условие в VBScript?

>= 0 [Red] Ex.: {0,1,2,3,4...}
Between -1 and -7 [Yellow] Ex.: {-1,-2,-3,-4,-5,-6,-7} ONLY
Greater or equal than -8 [Green] Ex.: {-8,-9,-10,-11...}

У меня есть следующий код: Mydate является допустимой датой, а красная часть в порядке. Проблема в желтом, я не знаю, смогу ли я подобрать вам такой же диапазон, как я. Похоже, что его игнорируют и вместо этого желтеют больший диапазон.

<%
    IF DateDiff("d", MyDate, Now()) >= 0 THEN
%>
[Red]
<%
    ELSEIF DateDiff("d", MyDate, Now()) =< -1 OR DateDiff("d", MyDate, Now()) >= -8 THEN
%>
[Yellow]
<%
    ELSE
%>
[Green]
<%
    END IF
%>

person Khrys    schedule 20.02.2014    source источник


Ответы (1)


Когда ЕСЛИ усложняются, использование Select Case может упростить задачу.

Для "коротких" диапазонов; также может обрабатывать «исключения»:

Select Case DateDiff("d", dtA, dtB) ' computed just once automagically
  Case 1, 2, 3, 5  ' effectively OR without the noise => risk of messing up a complicated IF/ELSE/ELSEIF sequence
    ...
  Case 4, 6, 7, 1256
    ...
  Case Else
    ...
End Select

Для "больших" непрерывных диапазонов:

Dim nDiff : nDiff = DateDiff("d", dtA, dtB) ' computed just once
Select Case True ' <-- dirty? trick
  Case nDiff < -15
    ...
  Case nDiff < 0
    ...
  Case nDiff = 0
    ...
  Case nDiff < 11
    ...
  Case Else ' 11 or greater
End Select

теперь логика похожа на вырезание частей числовой линии/числового луча.

PS:

Вы проверили свои предположения о DateDiff с помощью кода вроде:

>> dtB = Date()
>> dtA = DateAdd("d", -5, dtB)
>> WScript.Echo dtA, dtB, dateDiff("d", dtA, dtB)
>>
15.02.2014 20.02.2014 5
person Ekkehard.Horner    schedule 20.02.2014