时间相关操作
做项目时经常会遇到一些时间方面的处理,结合之前做项目写的,在这里做些笔记,以备不时之需。(以下代码纯属在文档中编写,若有报错,看逻辑即可,本人写此笔记的目的也只是为了记录逻辑,毕竟各项目中的代码还是略有不同)
Utils = {}
Utils.DefaultDate = "1970-01-01 08:00:00" --默认时间日期
Utils.oneDay = 86400
WEEK_TYPE = {
SUNDAY = 0, -- 日
MONDAY = 1, -- 一
TUESDAY = 2, -- 二
WEDNESDAY = 3, -- 三
THURSDAY = 4, -- 四
FRIDAY = 5, -- 五
SATURDAY = 6, -- 六
}
1)时间戳转换为年月日
---@return tDate: {year:number, month:number, day:number, hour:number, minute:number, second:number}
function Utils.getDateInfoByTime(unixTime)
-- 默认 Utils.DefaultDate
unixTime = unixTime or os.time()
if unixTime < 0 then
unixTime = os.time()
end
local tDate = {}
tDate.year = tonumber(os.date("%Y", unixTime))
tDate.month = tonumber(os.date("%m", unixTime))
tDate.day = tonumber(os.date("%d", unixTime))
tDate.hour = tonumber(os.date("%H", unixTime))
tDate.minute = tonumber(os.date("%M", unixTime))
tDate.second = tonumber(os.date("%S", unixTime))
return tDate
end
2)获取当前周几
function Utils.getWeekDay()
return tonumber(os.date("%w"))
end
3)获取凌晨时间
function Utils.getWeeHoursTime(nYear, nMonth, nDay)
return os.time({year=nYear, month=nMonth, day=nDay, hour=0, min=0, sec=0})
end
4)判断两个时间戳天数间隔(一天中任意一个时间)
function Utils.getPassDays(nStartTime, nEndTime)
if nEndTime <= nStartTime then
return 0
end
local tStart = Utils.getDateInfoByTime(nStartTime)
local tEnd = Utils.getDateInfoByTime(nEndTime)
local nStart = Utils.getWeeHoursTime(tStart.year, tStart.month, tStart.day)
local nEnd = Utils.getWeeHoursTime(tEnd.year, tEnd.month, tEnd.day)
local nPassDay, _ = math.modf((nEnd - nStart) / Utils.oneDay)
return nPassDay
end
-- 或者如下
function Utils.getPassDays(nStartTime, nEndTime)
if nEndTime <= nStartTime then
return 0
end
local days = math.floor(nEndTime / Utils.oneDay) - math.floor(nStartTime / Utils.oneDay)
return days
end
5)获取明天的日期
---@return tDate: {year:number, month:number, day:number, hour:number, minute:number, second:number}
function Utils.getTomorrowByTime(nTime)
local tTime = Utils.getDateInfoByTime(nTime)
local nWeeHours = Utils.getWeeHoursTime(tTime.year, tTime.month, tTime.day)
nWeeHours = nWeeHours + Utils.oneDay
return Utils.getDateInfoByTime(nWeeHours)
end
6)获取昨天日期
---@return tDate: {year:number, month:number, day:number, hour:number, minute:number, second:number}
function Utils.getYesterdayByTime(nTime)
local tTime = Utils.getDateInfoByTime(nTime)
local nWeeHours = Utils.getWeeHoursTime(tTime.year, tTime.month, tTime.day)
nWeeHours = nWeeHours - Utils.oneDay
return Utils.getDateInfoByTime(nWeeHours)
end
7)获取当月天数
function Utils.getMonthDays()
local nTime = os.time()
local year, month = os.date("%Y", nTime), os.date("%m", nTime) + 1 -- 当前月份的下个月
local nDays = os.date("%d", os.time({year = year, month = month, day = 0})) -- 减去一天即day=0,再格式化
return tonumber(nDays)
end
8)时间格式转换为时间戳
---@param strDate "2020-12-01 00:00:00"
function Utils.getTimestampByStr(strDate)
local _, _, y, m, d, hour, min, sec = string.find(strDate, "(%d+)-(%d+)-(%d+)%s*(%d+):(%d+):(%d+)")
local nTime = os.time({year=y, month=m, day=d, hour=hour, min=min, sec=sec})
return nTime
end
后续若有新用法,会不断扩充相关代码