我正在尝试检查Now
时间是否介于13:00和17:00之间。我认为_Datediff
函数(使用_dateadd()
和_NowTimeCalc()
)不起作用。
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
现在可以在开始时间&lt;结束时间,但我正在寻找的是一些好的方法,而不是手动检查。
答案 0 :(得分: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
答案 1 :(得分:1)
一个适合我的简单版本 - 只需使用hh:mm格式的字符串比较
#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") )