Lua 카운트다운 도구

11322 단어 Lua
최근에 Lua가 카운트다운에 사용하는 작은 도구를 쓰고 있는데 대략적인 내용을 공유합니다.
local countDownUtilsMaker = function()
    local private = {}
    local public = {}

    private.hour24 = 24 * 60 * 60
    private.offsetHour8 = 8 * 60 * 60
    private.hour1 = 60 * 60

    public.init = function()
        public.time = os.time()

        --  
        private.curYear = os.date("%Y", public.time)
        private.curMonth = os.date("%m", public.time)
        private.curDay = os.date("%d", public.time)
    end

    --  
    public.countDownHour = function(timeLen, startTS)
        local countDownSec = os.time() - startTS
        local timeLenSec = timeLen * private.hour1
        if countDownSec >= timeLenSec then
            return true
        else
            return false
        end
    end

    --  
    public.countToTimestamp = function(targetTS)
        local time = os.time()
        local countDownSec = time - targetTS
        if countDownSec < 0 then
            return -countDownSec
        end
        return countDownSec
    end

    --  
    public.countDownOClockSharpDaily = function(oClock)
        local time = os.time()
        local countDownSec = math.ceil(time / private.hour24) * private.hour24 - time - private.offsetHour8 + oClock * private.hour1
        return countDownSec
    end

    --  
    public.countDownWeek = function(day, oClock)
        if day == nil or day < 0 or day >  then
            day = 1
        end

        local timestamp = os.time()
        --  
        local curWDay = os.date("%w", timestamp)
        --  
        local day2NxtSun = 7 - curWDay

        --  
        local destination = timestamp + (day2NxtSun + day - 1) * private.hour24 + public.countDownOClockSharpDaily(oClock)
        local countDownSec = public.countToTimestamp(destination)
        return countDownSec
    end

    --  
    public.countDownMonth = function(day, oClock)
        local timestamp = os.time()
        local curYear = os.date("%Y", timestamp)
        local curMonth = os.date("%m", timestamp)
        local  destination = os.time({year = curYear,
            month = curMonth + 1,
            day = day,
            hour = oClock})
        local countDownSec = public.countToTimestamp(destination)
        return countDownSec
    end

    return public
end

사실 전체적인 사고방식은 매우 간단하다. 바로 시간 스탬프를 필요한 격식으로 바꾸어 시간을 재는 것이다.그러나 계산 정밀도가 제한되어 있기 때문에 카운트다운이 필요한 시간이 길고 짧을 때 카운트다운이 정확하지 않은 상황이 발생할 수 있다.

좋은 웹페이지 즐겨찾기