2013-02-22 1 views
3

Я пытаюсь проверить, находится ли время между, скажем, 13:00 и 17:00, Now. Я не думаю, что функция _Datediff (с использованием _dateadd() и _NowTimeCalc()) будет работать.Как проверить, находится ли время между заданным временем в AutoIt

Есть ли какая-нибудь библиотечная функция в AutoIt, что мне не хватает? Или мне нужно написать ручную функцию, сравнивая @Hour и @min?

Я делаю что-то вроде этого:

Func CheckTime($sStart, $sEnd) 
    $s = StringSplit($sStart, ":") 
    $e = StringSplit($sEnd, ":") 
    $s[1] = Int($s[1]) 
    $s[2] = Int($s[2]) 
    $e[1] = Int($e[1]) 
    $e[2] = Int($e[2]) 
    $result = False 

    If $s[0] <= 0 And $e <= 0 Then 
     ConsoleWrite("Wrong Time Format") 
     Exit 
    EndIf 

    If $s[1] <= @HOUR And $e[1] >= @HOUR Then 
     If @HOUR >= $s[1] And @MIN > $s[2] Then 
      If @HOUR <= $e[1] And @MIN < $e[2] Then 
       $result = True 
      EndIf 
     EndIf 
    EndIf 
    Return $result 
EndFunc ; ==>CheckTime 

В настоящее время работает хорошо, когда время начала < окончания, но то, что я ищу, это какой-то хороший метод вместо ручных проверок.

ответ

3

Используя стандартные пользовательские функции (UDF), вы можете попробовать использовать что-то вроде этого:

#region ;************ Includes ************ 
#include <Array.au3> 
#include <Date.au3> 
#endregion ;************ Includes ************ 


ConsoleWrite(_timeBetween(@HOUR & ':' & @MIN, '10:05', '12:09')) 

Func _timeBetween($cTime, $sTime, $eTime) 
    If Not _DateIsValid('2000/01/01 ' & $cTime) Then Return -1 
    If Not _DateIsValid('2000/01/01 ' & $sTime) Then Return -2 
    If Not _DateIsValid('2000/01/01 ' & $eTime) Then Return -3 

    ;~ ConsoleWrite(_DateDiff('s', '2000/01/01 ' & $cTime & ':00', '2000/01/01 ' & $sTime & ':00') & @CRLF) 
    ;~ ConsoleWrite(_DateDiff('s', '2000/01/01 ' & $cTime & ':00', '2000/01/01 ' & $eTime & ':00') & @CRLF) 

    If _DateDiff('s', '2000/01/01 ' & $cTime & ':00', '2000/01/01 ' & $sTime & ':00') < 0 And _ 
     _DateDiff('s', '2000/01/01 ' & $cTime & ':00', '2000/01/01 ' & $eTime & ':00') > 0 Then 

     Return 1 
    Else 
     Return 0 
    EndIf 

EndFunc ; ==>_timeBetween 
+0

Спасибо, что было легко, чем я ожидал – XPecto

0

Более простая версия, которая работает для меня - только с помощью строки сравнения в чч: мм

#include <Date.au3> 

Func _timeBetween($sTime, $eTime) 
    Return (_NowTime(4) < $eTime) And (_NowTime(4) > $eTime) 
EndFunc ; ==>_timeBetween 


MsgBox(0, "daytime","is day = " & _timeBetween("08:00"."23:00")) 
+0

Приятно, но это не сработало бы для перехода в полночь, например в период с 22:00 до 02:00 – scibuff