判断是否在活动时间内
日期时间字符串转时间戳
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