• Lua通过某一时间点获取时间戳


    -- * @description: 通过某一时间点获取时间
    -- * @params: @futureDays:0代表的意思是当天,1是明天,@_hour:指的24格式的时间,传入2就是凌晨2点
    -- * @return: 时间戳
    function Tool:GetFutureTime(futureDays, _hour)
        local curTimestamp = os.time()
        local dayTimestamp = 24 * 60 * 60
        local newTime = curTimestamp + dayTimestamp * futureDays
        local newDate = os.date("*t", newTime)
        --这里返回的是你指定的时间点的时间戳
        return os.time({ year = newDate.year, month = newDate.month, day = newDate.day, hour = _hour, minute = newDate.minute, second = newDate.second })
    end
    self:GetFutureTime(1, 0)

    打印结果:1607443200

    进行拓展获取剩余时间:

    -- * @description: 转换为天时间
    -- * @params: @_time:秒数
    -- * @return:返回剩余时间,格式如:05:07:16:33
    -- * @date: 2020-12-7 11:10
    function ToolKit:FormatUnixTime(_time)
        if _time and _time >= 0 then
            ---一天的秒数86400
            local day = math.floor(_time / 60 / 60 / 24)
            --小于10 需要十位补0
            local hour = math.floor(_time / 3600) % 24
            local minute = math.floor(_time / 60) % 60
            local second = math.floor(_time % 60)
            local dayStr = day < 10 and "0" .. day or day
            local hourStr = hour < 10 and "0" .. hour or hour
            local minuteStr = minute < 10 and "0" .. minute or minute
            local secondStr = second < 10 and "0" .. second or second
            return dayStr .. "" .. hourStr .. "" .. minuteStr .. "" .. secondStr
        end
    end

    通过string.format进行优化后:

    -- * @description: 转换为天时间
    -- * @params: @_time:秒数
    -- * @return:返回剩余时间,格式如:05:07:16:33
    -- * @date: 2020-12-7 11:10
    -- * @author: 云更
    function ToolKit:FormatUnixTime(_time)
        if _time and _time >= 0 then
            --一天的秒数86400
            local day = math.floor(_time / 86400)
            local hour = math.fmod(math.floor(_time / 3600), 24);
            local minute = math.fmod(math.floor(_time / 60), 60)
            local second = math.fmod(_time, 60)
            --小于10 需要十位补0 ,%02d 格式化为至少2位十进制整数 
            return string.format("%02d:%02d:%02d:%02d", day, hour, minute, second)
        end
    end

     拓展:获取通过某一时间点获取时间(获取隔周的时间)

    -- * @description: 转换为小时时间
    -- * @params: @_time:秒数
    -- * @return:返回剩余时间,格式如:07:16:33
    -- * @date: 2020-12-7 11:10
    function ToolKit:FormatHourUnixTime(_time)
        if _time and _time >= 0 then
            local hour = math.fmod(math.floor(_time / 3600), 24);
            local minute = math.fmod(math.floor(_time / 60), 60)
            local second = math.fmod(_time, 60)
            --小于10 需要十位补0 ,%02d 格式化为至少2位十进制整数 
            return string.format("%02d:%02d:%02d", hour, minute, second)
        end
    end
    -- * @description: 获得明天零点的时间戳
    -- * @params: @_timerStamp:当前的时间
    -- * @return: 明天零点的时间戳
    -- * @date: 2020-12-15 16:27
    function ToolKit:GetNextDayZeroTimestamp(_timerStamp)
        --获得当前的时间
        local timeStamp = _timerStamp
        if not timeStamp then
            timeStamp = os.time()
        end
        --获得时间格式
        local formatTime = os.date("*t", timeStamp)
        formatTime.hour = 23
        formatTime.min = 59
        formatTime.sec = 59
        --获得第二天零点的时间戳
        local nextTimestamp = os.time(formatTime) + 1
        return nextTimestamp
    end
    
    -- * @description: 获得当天零点的时间戳
    -- * @params: @_timerStamp:当前的时间
    -- * @return: 明天零点的时间戳
    -- * @date: 2020-12-15 16:27
    function ToolKit:GetCurrentDayZeroTimestamp(_timerStamp)
        --获得当前的时间
        local timeStamp = _timerStamp
        if not timeStamp then
            timeStamp = os.time()
        end
        --获得时间格式
        local formatTime = os.date("*t", timeStamp)
        formatTime.hour = 0
        formatTime.min = 0
        formatTime.sec = 0
        --获得第二天零点的时间戳
        local curTimestamp = os.time(formatTime)
        return curTimestamp
    end
    
    -- * @description: 通过某一时间点获取时间(获取隔周的时间戳)
    -- * @params: @updateTime:更新时间(几点0-24)
    -- * @return: @residueStr:剩余天数(05:16:14:22(天:时:分:秒));@diffTimestamp:剩余时间
    -- * @date: 2020-12-15 10:45
    function ToolKit:GetFutureWeekTime(updateTime)
        if not updateTime then
            updateTime = 0
        end
        --获得当前服务器的时间
        local curTimestamp = os.time()
        --获得时间格式  {"day":15,"hour":15,"isdst":false,"min":34,"month":12,"sec":13,"wday":3,"yday":350,"year":2020}
        local curTimeFormat = os.date("*t", curTimestamp)
        local nextTimestamp = 0
        if curTimeFormat.hour < updateTime then
            --当时间小于更新时间
            nextTimestamp = ToolKit:GetCurrentDayZeroTimestamp(curTimestamp) + updateTime * 3600
        else
            --获得第二天零点的时间戳
            nextTimestamp = ToolKit:GetNextDayZeroTimestamp(curTimestamp) + updateTime * 3600
        end
        --剩余天数
        local residueDay = 0
        --到本周末还有多少时间
        if curTimeFormat.wday == 1 then
            --周日
            residueDay = curTimeFormat.hour < updateTime and 6 or 7
        elseif curTimeFormat.wday == 2 then
            --周一
            residueDay = curTimeFormat.hour < updateTime and 7 or 1
        else
            residueDay = curTimeFormat.hour < updateTime and curTimeFormat.wday - 2 or curTimeFormat.wday - 1
        end
        residueDay = 7 - residueDay
        --转换显示格式
        local residueStr = ""
        local diffTimestamp = os.difftime(nextTimestamp, curTimestamp)
        local temp = ToolKit:FormatHourUnixTime(diffTimestamp)
        if residueDay > 0 then
            residueStr = string.format("%02d:%s", residueDay, temp)
        else
            residueStr = ToolKit:FormatUnixTime(diffTimestamp)
        end
        return residueStr, diffTimestamp
    end
  • 相关阅读:
    Express入门
    nodejs入门
    css实现点点点效果
    定时器详解和应用、js加载阻塞、css加载阻塞
    栈内存和堆内存有什么区别?
    webpack入门
    Ubuntu常用命令集合
    HTTP缓存机制
    125. 验证回文字符串
    算法的时间复杂度和空间复杂度(js版)
  • 原文地址:https://www.cnblogs.com/jbw752746541/p/14105442.html
Copyright © 2020-2023  润新知