判断是否在活动时间内
日期时间字符串转时间戳
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义