Lua开发笔记—时间相关处理

时间相关操作

做项目时经常会遇到一些时间方面的处理,结合之前做项目写的,在这里做些笔记,以备不时之需。(以下代码纯属在文档中编写,若有报错,看逻辑即可,本人写此笔记的目的也只是为了记录逻辑,毕竟各项目中的代码还是略有不同)

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

后续若有新用法,会不断扩充相关代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值