判断是否在活动时间内

 日期时间字符串转时间戳

function Parse_yyyyMMdd_hhmmss(dtStr)
    --local str = "1970-01-01 08:00:03"
    local pattern = "(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)"
    local index1, index2, year, month, day, h, m, s = string.find(dtStr, pattern)

    local dateTime = { year = year, month = month, day = day, hour = h, min = m, sec = s }
    return os.time(dateTime)
end

 

活动在2022-02-01开始, 2022-02-07结束, 判断是否在活动时间内

function NowBetweenDateTime(beginDtTimeStr, endDtTimeStr)
    local utcSec1 = Parse_yyyyMMdd_hhmmss(beginDtTimeStr)
    local utcSec2 = Parse_yyyyMMdd_hhmmss(endDtTimeStr)

    local nowTimeStamp = os.time()
    return nowTimeStamp >= utcSec1 and nowTimeStamp <= utcSec2
end

 

活动在每天的10:00开始, 13:30结束, 判断是否在活动时间内

function NowBetweenDayTime(beginTimeStr, endTimeStr)
    local pattern = "(%d+):(%d+)"

    local nowDateTime = os.date("*t", os.time())
    local nowDaySec = nowDateTime.hour * 3600 + nowDateTime.min * 60

    local index1, index2, h, m = string.find(beginTimeStr, pattern)
    local beginDaySec = h * 3600 + m * 60
    if nowDaySec < beginDaySec then return false end

    index1, index2, h, m = string.find(endTimeStr, pattern)
    local endDaySec = h * 3600 + m * 60
    if nowDaySec > endDaySec then return false end

    return true
end

 

活动在2022-02-01 2022-02-07期间, 每天20:00:00开始, 21:00:00结束, 判断当前的活动状态

function Parse_yyyyMMdd(dtStr)
    --local str = "1970-01-01"
    local pattern = "(%d+)-(%d+)-(%d+)"
    local index1, index2, year, month, day = string.find(dtStr, pattern)

    local dateTime = { year = year, month = month, day = day, hour = 0, min = 0, sec = 0 }
    return os.time(dateTime)
end

function Parse_hhmmss(timeStr)
    --local str = "08:00:03"
    local pattern = "(%d+):(%d+):(%d+)"
    local index1, index2, h, m, s = string.find(timeStr, pattern)
    return h * 3600 + m * 60 + s
end

function GetActivityStatus(beginDtStr, endDtStr, beginTimeStr, endTimeStr)
    local nowTimeStamp = os.time()

    local beginTimeStamp = Parse_yyyyMMdd(beginDtStr)
    if nowTimeStamp < beginTimeStamp then
        return "before" --还不到活动时间
    end

    local endTimeStamp = Parse_yyyyMMdd(endDtStr)
    if nowTimeStamp > endTimeStamp then
        return "after" --已过活动时间
    end

    local nowDt = os.date("*t", nowTimeStamp)
    local nowTimeToday = nowDt.hour * 3600 + nowDt.min * 60 + nowDt.sec

    local beginTimeToday = Parse_hhmmss(beginTimeStr)
    if nowTimeToday >= beginTimeToday then
        local endTimeToday = Parse_hhmmss(endTimeStr)
        local todayEndLeftTime = endTimeToday - nowTimeToday
        if todayEndLeftTime >= 0 then
            return "ing", todayEndLeftTime --活动进行中
        end

        local tomorrowBeginLeftTime = 24 * 3600 - nowTimeToday + beginTimeToday
        if nowTimeStamp + tomorrowBeginLeftTime > endTimeStamp then
            return "last_time_ended" --最后一次结束
        end
        return "today_ended", tomorrowBeginLeftTime --当前已结束
    end

    local todayBeginLeftTime = beginTimeToday - nowTimeToday
    return "today_not_started", todayBeginLeftTime --当天还未开始
end

 

活动每周三开启一次,计算下次活动的开启日期

function NextWdayDateTime(wday)
    local timeStamp = os.time()

    --今天周几
    local dt = os.date("*t", timeStamp)
    if 1 == dt.wday then dt.wday = 7
    else dt.wday = dt.wday - 1 end

    local dayDiff = dt.wday - wday + 7
    timeStamp = timeStamp + dayDiff * 24 * 3600
    return os.date("*t", timeStamp)
end

 

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