Как каждый день проверять время на попадание в интервал между часами начала и конца?
Мне требуется выполнять некий код в программе в определенные часы. К примеру ставим диапазон 20 - 12. Это значит что код будет выполняться каждую минуту с 20 часов вечера (каждого дня) по 12 часов дня (каждого следующего дня).
Я пробовал использовать InRange
в таймере для этих целей, но оно начинает работать неправильно если есть переход на следующие сутки.
К примеру сделать с 7 утра по 8 вечера:
if InRange(strtoint(FormatDateTime('hh', now)), strtoint('07'), strtoint('20'))
И все работает. Но, если я хочу скажем с 8 вечера по 12 часов дня, то такой код уже не работает... диапазон')
var
now_h:string;
dtCurrent,dtFrom,dtTo:TDateTime;
range_hour_begin,range_hour_end:string;
begin
range_hour_begin:='20';
range_hour_end:='15';
now_h:=FormatDateTime('hh', now);
dtCurrent := Now;
dtFrom := RecodeHour(dtCurrent, strtoint(range_hour_begin));
dtTo := RecodeHour(dtCurrent, strtoint(range_hour_end));
if strtoint(range_hour_end) < strtoint(range_hour_begin)
then dtTo := IncDay(dtTo);
if InRange(dtCurrent, dtFrom, dtTo)
then showmessage('Входит в диапазон')
else showmessage('Не входит в диапазон');
Источник: Stack Overflow на русском