VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Реализовать GotoIfTime в extensions.lua?

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
Kucherow
Сообщения: 52
Зарегистрирован: 30 мар 2015, 12:31

Реализовать GotoIfTime в extensions.lua?

Сообщение Kucherow »

Написал функцию CheckTime для этих целей, она конечно работает, но требует вводить дату в правильном формате(иначе не распарсит, защиты от дурака нет), и требует тестирования(наверняка могут быть не предусмотренные ситуации). Может есть готовое решение лучше моего?

Код: Выделить всё

--Format CheckTime(HH:MM-HH:MM,W-W,DD-DD,MM-MM,YYYY-YYYY)
--Возвращает True, если текущее время входит в заданные рамки.
CheckTime = function(time,weekday,day,month,year)
  local date ={
    ["hourbegin"]=tonumber(string.sub(time,1,2)),
    ["hourend"]=tonumber(string.sub(time,-5,-4)),
    ["minutebegin"]=tonumber(string.sub(time,4,5)),
    ["minuteend"]=tonumber(string.sub(time,-2,-1)),
    ["weekdaybegin"]=tonumber(string.sub(weekday,1,1)),
    ["weekdayend"]=tonumber(string.sub(weekday,-1)),
    ["daybegin"]=tonumber(string.sub(day,1,2)),
    ["dayend"]=tonumber(string.sub(day,-2,-1)),
    ["monthbegin"]=tonumber(string.sub(month,1,2)),
    ["monthend"]=tonumber(string.sub(month,-2,-1)),
    ["yearbegin"]=tonumber(string.sub(year,1,4)),
    ["yearend"]=tonumber(string.sub(year,-4,-1))
  }

  local datenow ={
    ["hour"]=tonumber(os.date("%H")),
    ["minute"]=tonumber(os.date("%M")),
    ["weekday"]=tonumber(os.date("%w")),
    ["day"]=tonumber(os.date("%d")),
    ["month"]=tonumber(os.date("%m")),
    ["year"]=tonumber(os.date("%Y"))
  }

        if ((datenow.minute<date.minutebegin) and (datenow.hour<date.hourbegin)) or ((datenow.minute>date.minuteend) and (datenow.hour>date.hourend)) then
          return false;
        elseif (datenow.weekday<date.weekdaybegin) or (datenow.weekday>date.weekdayend) then
          return false;
        elseif (datenow.day<date.daybegin) or (datenow.day>date.dayend) then
          return false;
        elseif (datenow.month<date.monthbegin) or (datenow.month>date.monthend) then
          return false;
        elseif (datenow.year<date.yearbegin) or (datenow.year>date.yearend) then
          return false;
        else
          return true;
        end;
end;
P.S. Поиск по форуму("lua gotoiftime") ничего не дал.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH