倒计时计算

 通用倒计时函数

local _TimeUnit_Seconds = { 24 * 3600, 3600, 60, 1 } ---天, 时, 分, 秒的秒数
---@param seconds "秒"
---@param startTimeUnit "1-天, 2-时, 3-分, 4-秒"
---@param endTimeUnit "1-天, 2-时, 3-分, 4-秒"
---@param outValues "存放结果值, { 天, 时, 分, 秒 }"
---@return outValues
function ConvertSecondToTimeUnitValues(seconds, startTimeUnit, endTimeUnit, outUnitValues)
    if nil == outUnitValues then outUnitValues = {} end

    local index1 = startTimeUnit or 1
    local index2 = endTimeUnit or #_TimeUnit_Seconds
    for i=index1,index2 do
        local unitSec = _TimeUnit_Seconds[i]
        local unitValue = math.floor(seconds / unitSec)
        seconds = seconds - unitValue * unitSec
        outUnitValues[i] = unitValue
    end

    for i=1,index1-1 do
        outUnitValues[i] = 0
    end
    return outUnitValues
end

 

超过天: 10天18时03分05秒。不足1天: 18时03分05秒

local leftTime = xxx;
local unitValues = {}
ConvertSecondToTimeUnitValues(leftTime, 1, 4, unitValues)
if leftTime >= 24 * 3600 then
    local str = string.format("%s天%02d时%02d分%02d秒", unitValues[1], unitValues[2], unitValues[3], unitValues[4])
else
    local str = string.format("%02d时%02d分%02d秒", unitValues[2], unitValues[3], unitValues[4])
end

 

超过天: 1天。不足1天: 18时03分05秒

local leftTime = xxx;
local unitValues = {}
ConvertSecondToTimeUnitValues(leftTime, 1, 4, unitValues)
if leftTime >= 24 * 3600 then
    local str = string.format("%s天", unitValues[1])
else
    local str = string.format("%02d时%02d分%02d秒", unitValues[2], unitValues[3], unitValues[4])
end

 

超过天: 28时12分30秒。不足1天: 18时12分30秒

local leftTime = xxx;
local unitValues = {}
ConvertSecondToTimeUnitValues(leftTime, 2, 4, unitValues)
local str = string.format("%02d时%02d分%02d秒", unitValues[2], unitValues[3], unitValues[4])

 

超过天: 1天。不足1天: 18:12:30。不足1小时:12:30。不足1分钟:30秒

local leftTime = xxx;
local unitValues = {}
ConvertSecondToTimeUnitValues(leftTime, 2, 4, unitValues)
if leftTime >= 24 * 3600 then
    local str = string.format("%s天", unitValues[1])
elseif leftTime >= 3600 then
    local str = string.format("%02d:%02d:%02d", unitValues[2], unitValues[3], unitValues[4])
elseif leftTime >= 60 then
    local str = string.format("%02d:%02d", unitValues[3], unitValues[4])
else
    local str = string.format("%d秒", unitValues[4])
end

 

posted @ 2022-01-27 23:10  yanghui01  阅读(245)  评论(0编辑  收藏  举报