Диапазон времени VBS с часами и минутами - PullRequest
0 голосов
/ 30 января 2019

Мне нужно запустить скрипт vbs, основанный на диапазоне времени между 10:05 и 20:30.Это мой текущий код:

If Hour(Now()) >= 10 OR hour(Now()) < 20 Then
   WScript.Echo "Time Range"

Else

   WScript.Echo "NOT Time Range"

End If

Но я борюсь с минутными частями.Просмотр документации Minute Function для VBS для меня был не совсем понятен.

1 Ответ

0 голосов
/ 30 января 2019

Используйте функцию Time(), чтобы получить текущее время и проверить литералы времени, или, если вам нужно использовать строки (например, получить конфигурацию откуда-то), вы можете использовать функцию CDate, чтобы получить время

* 1004.*

отредактировано для адаптации к комментариям

OP спросил, почему And, а не Or при проверке временного диапазона.В то время как рассматриваемый случай должен обрабатываться с помощью And (текущее время должно быть больше, чем время начала And ниже, чем время окончания), есть случай, когда необходимо использовать Or: когдавременной диапазон для проверки начинается до полуночи и заканчивается через него.В этом случае условие изменяется

Option Explicit 

Dim startTime, endTime

    ' Using time literals
    If InTime( #10:05#, #20:30# ) Then 
        WScript.Echo "In time range"
    Else
        WScript.Echo "NOT in time range"
    End If 

    ' Using strings
    If InTime( CDate("10:05") , CDate("20:30") ) Then 
        WScript.Echo "In time range"
    Else
        WScript.Echo "NOT in time range"
    End If 

    ' Check over midnight
    If InTime( #20:30# , #10:05# ) Then 
        WScript.Echo "In time range"
    Else
        WScript.Echo "NOT in time range"
    End If 

' Logic moved to a function to avoid duplication in previous samples 
Function InTime( startTime, endTime )
Dim currentTime
    currentTime = Time()

    If startTime <= endTime Then 
        ' If startTime <= endTime both are in same day 
        '   current time should be 
        '       greater than startTime 
        '       AND lower than endTime
        '
        '                        >----------------------------<
        '  0.1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.
        '
        InTime = CBool( ( currentTime >= startTime ) And ( currentTime <= endTime ) )
    Else 
        ' startTime > endTime when both times don't belong to same day
        '   current time should be 
        '       greater than start time (towards midnight) 
        '       OR lower than end time (backwards to midnight)
        '
        '                         >---------|--------------------<
        '  13.14.15.16.17.18.19.20.21.22.23.0.1.2.3.4.5.6.7.8.9.10.11.12.
        '
        '  ----------------------<                             >---------
        '  0.1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.
        '
        InTime = CBool( ( currentTime >= startTime ) Or ( currentTime <= endTime ) )
    End If 
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...