Что нового

[Время, дата] Диапазон времени

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Дано два InputBox'а, в которых вводишь время работы. В первое - время начало, во второе - время конца.
Как задать правильно условие для проверки вхождения в этот диапазон? Ведь диапазон может быть 0ч-9ч, а может и 22ч-4ч
Как исправить код, чтобы заданный диапазон в Inputbox'ах соблюдался?
Код:
If @HOUR>=GUICtrlRead($botn) And @HOUR<GUICtrlRead($botk) Then  ; определен заданный диапазон
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
Код:
#include <GUIConstantsEx.au3>
HotKeySet('{ESC}', '_exit')

$Form1 = GUICreate("Form1", 463, 138, 192, 124)
Global $Input1 = GUICtrlCreateInput("", 32, 24, 121, 21)
Global $Input2 = GUICtrlCreateInput("", 32, 56, 121, 21)
$Button1 = GUICtrlCreateButton("Button1", 184, 40, 75, 25)
Global $Label1 = GUICtrlCreateLabel("", 32, 96, 228, 17)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			check()
	EndSwitch
WEnd

Func check()
	Local $i = 1
	While 1
		If (@HOUR & '.' & @MIN) >= GUICtrlRead($Input1) Then
			While 1
				GUICtrlSetData($Label1,$i)
				$i += 1
				If (@HOUR & '.' & @MIN) >= GUICtrlRead($Input2) Then
					GUICtrlSetData($Label1, 'End')
					ExitLoop 2
				EndIf
				Sleep(100)
			WEnd
		EndIf
		Sleep(100)
	WEnd
EndFunc   ;==>check

Func _exit()
	Exit
EndFunc   ;==>_exit
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Не совсем понята задача.

Мне не нужен основной цикл.

Дано начальное и конечное время работы.

И мне необходимо проверить - данный момент времени входит в этот промежуток или нет.

То есть как эту строку перевести на язык Ауто_Ита:

Если данный момент времени больше начального времени и меньше конечного, то :
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
Код:
If GUICtrlRead($Input1) = @HOUR And GUICtrlRead($Input2) > @HOUR Then
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Не совсем понял.

Мне проверка не "точки начала" нужна. А входит-ли настоящее время в этот период.

Допустим часть программы начинает работать только в этот период.

начала=22
конец=3

То есть этот модуль должен работать в период с 22ч до 3ч, это например.

А программу можно включить и в 23.00.

А по Вашему коду идёт проверка начала работы только.

То есть мне нужно просто проверить входит-ли настоящее время в этот диапазон.

Просто такая загвоздка.

Если просто проверять на больше-меньше, то не получится:

Если текущее время больше начала и меньше конца то

Пример. Начало=22. Конец=4. Текущее время= 23

Если 23>22 и 23<4 то НЕ проходит.
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
зачем проверка в одной строке?
проверяем время. если 22, значит функция работает
в самой функции вторая проверка - если 03, значит выход из функции и опять ожидание 22 часов
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Мне проверка хоть в 5 строках - это не важно.

Пишешь " проверяем время, если 22 значит функция работает".
А причем тут 22? Если задан интервал от (допустим) 20 до 04, а текущее время 22ч, то зачем сравнивать равенством точку отсчета
с текущем временем??? Мне же нужно просто узнать входит текущее время в указанный диапазон.

Мне не нужен общий цикл. Мне просто нужна функция или несколько строчек кода для этой проверки. Желательно без каких-то глобальных переменных. Так как эта проверка - это малая часть общей программы.

Или я чего-то не понимаю... Если не понимаю - напиши, пожалуйста, код.
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
это посмотри http://autoit-script.ru/index.php?topic=14032.0
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Давай заново. Чтобы ты меня понял или я тебя.

Возьмем вводные данные.

Необходима проверка на вхождение в диапазон работы части программы.

Начало работы=20ч
Конец работы=5ч.

То есть, если я запускаю программу в 23ч, то можно просто начало работы проверить 23ч>20ч
А если я запустил в 3ч?! Это входит в данный диапазон времени, но уже не проверишь 3ч>20ч - это уже неверно.

Тут либо несколько условий, либо просто тупо забить массив числами-часами(20,21,22,23,0,1,2,3,4,5) и уже сравнивать с этим массивом. Но это громоздко. Может есть решение проще?
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
по ссылке что я дал. последнее сообщение на проверку вхождения текущего часа в заданный диапазон
Код:
$res = _CheckInterval('20','5',@HOUR)

при успехе возвращает 1, если нет, то 0
вот тебе и проверка
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Да, уже разобрался. Спасибо за помощь. Не думал, что такая морока будет...
 

Dima1337

Осваивающий
Сообщения
186
Репутация
24
'Исправленно'
Вы это имели ввиду?
Код:
Local $Data_1, $Data_2, $Hour
$Hour = @HOUR
$Data_1 = 03
$Data_2 = 09

If $Data_1 > $Data_2 Then
	If $Hour >= $Data_1 Or $Hour <= $Data_2 Then
		MsgBox(64, 'Тест', 'Время работы: '&$Data_1&' до: '&$Data_2&' Сейчас: '&$Hour)
	EndIf
ElseIf $Data_1 < $Data_2 Then
	If $Hour >= $Data_1 And $Hour <= $Data_2 Then
		MsgBox(64, 'Тест', 'Время работы: '&$Data_1&' до: '&$Data_2&' Сейчас: '&$Hour)
	EndIf
EndIf

OffTopic:
Я зачем то вам в лс написал :stars: :blink:
 

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
можно и так
Код:
$hour = '22,23,00,01,02,03,04,05'
If StringInStr($hour,@HOUR) Then MsgBox(0,'',@HOUR)

проверяется блоком вхождения. так как у нас четкие цифровые показания времени, то будет работать точно
 
Автор
Д

Дмитрий1984

Новичок
Сообщения
24
Репутация
0
Можно и так... Но оптимальнее и проще от Dima1337
Я сам к этому подходил, но в чем-то глупил. Всё банально просто и работает.
Ссылка на библиотеку полезная, кто работает с разными форматами времени. А у мне просто нужно.
Ну а последний вариант - я уже писал. Создать массив. Тоже можно, но от тёзки проще.

Всем спасибо!
 

gora

Знающий
Сообщения
315
Репутация
19
Код:
$begin = 22
$end = 4
$now = 23

If ($begin < $end And ($now > $begin And $now < $end)) Or ($begin > $end And ($now > $begin Or $now < $end)) Then MsgBox(64, '', 'OK!'& @LF & $now & 'ч в диапазоне от ' & $begin & 'ч до ' & $end & 'ч')
 
Верх