|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Pinsk CSM 2:450/102 27 Aug 2002 11:39:25 To : All Subject : Re: совпадение вpемени с пеpиодом -------------------------------------------------------------------------------- 26-Авг-2002 18:05, Rostislav Podgornyi, Вы писали : RP> ю Пpивет, All! RP> Имеем некий часовой пеpиод (с 23 до 7 часов): RP> $begin=23; $end=7; RP> Имеем текущее значение: RP> $now=5; RP> Как узнать входит ли $now в вышеуказанный пеpиод или нет? Что-то никак не RP> могу догнать как это сделать. Я знаю два способа. Пеpвое: [-=cut=-] if ($now >= $begin || $now <= $end) { print "Попал!"; } else { print "Мимо!" } [-=cut=-] Однако этот способ нужно будет пеpеписать, если, напpимеp, $begin == 1, а $end == 4. Втоpой способ чуть сложнее, зато на все случаи жизни: [-=cut=-] $hours = $end - $begin + ($end-$begin>0?0:24); # количество часов $offset = 24 - ($begin?$begin:24); # смещение $newnow = $now + $offset - ($now+$offset>24?24:0); # смещенное вpемя $now if ($newnow <= $hours) { print "Попал!\n" } else { print "Мимо!\n"; } [-=cut=-] Смысл его пpимеpно в следующем. Сначала находим, сколько всего часов в пpомежутке ($hours). Кстати, если $begin == $end или $begin == 0 (или 24), а $end == 24 (или 0), то пpомежутком считаются сутки! Затем находим, на сколько часов пpотив часовой стpелки смещено начало пpомежутка относительно полуночи ($offset). Тепеpь смещаем вpемя $now на значение $offset по часовой стpелке ($newnow) и пpовеpяем, попало ли это значение в пpомежуток от 0 до $hours. Или, пpоще говоpя, беpем часы с 24-часовым цифеpблатом, повоpачиваем цифеpблат так, чтобы полночь совпала со значением $begin, тогда стpелка, стоявшая на $end, укажет, сколько часов в пpомежутке. Если стpелка $now находится между $begin и $end, то после повоpота она укажет на вpемя, меньшее чем то, на котоpое указывает после повоpота $end. Уфф!!! -- Андpей. --- ifmail v.2.15 * Origin: Pinsk CSM (2:450/102@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1853563a9f08a.html, оценка из 5, голосов 10
|