Lua: 获取季度数和季度内的日期

我是 Lua 的新手,正在尝试学习如何在 Lua 中操作日期值。

我有一个数据库,其中有一个用整数表示的 date_id ,它从 2000 年 1 月 1 日开始(即 2000 年 1 月 1 日 = 0,2000 年 1 月 2 日 = 1,2000 年 1 月 3 日 = 2,依此类推)

获取该日期的年份的方法如下所示:

basedate = (os.time{year=2000, month=1, day=1})
lua_dremel_seconds = 86400  --一天中的秒数

local function Year(date_id)
    local lua_date_id = tostring(date_id) * lua_dremel_seconds
    return os.date("%Y", basedate + lua_date_id)
end

我想要解决的问题有2个:

  1. 我应该如何操作函数以准确地获取自 2000 年 1 月 1 日以来一个日期的季度数?(即任何 date_id 在 2000 年 1 月 1 日至 2000 年 3 月 31 日之间 = 0,2000 年 4 月 1 日至 2000 年 6 月 30 日之间 = 1,依此类推)

  2. 我应该如何操作函数以准确地获取季度内的日期?(即 2000 年 1 月 1 日 = 1,2000 年 1 月 2 日 = 2,2000 年 4 月 1 日 = 1,2000 年 4 月 2 日 = 2)

是否有一种简单的方法可以从 basedate+ lua_date_id 中算出这个结果,还是我应该换一种完全不同的思路来考虑?

谢谢!

点赞
用户1847592
用户1847592
function decode_date_id(date_id)
   local tm = os.time{year=2000, month=1, day=1+date_id}
   local dt = os.date("*t", tm)
   local month_q = dt.month - (dt.month - 1)%3
   local tm_q = os.time{year=dt.year, month=month_q, day=1}
   local q = (month_q-1)/3+(dt.year-2000)*4  -- number of quarter
   local q_day = math.floor((tm - tm_q)/86400 + 1.5)       -- day of quarter
   return dt.year, dt.month, dt.day, q, q_day
end

print(decode_date_id(7825))  -->  2021   6   4   85   65

定义了一个 decode_date_id 函数,输入一个 date_id,输出该日期的年、月、日以及季度和季度内的天数。其中,该函数通过计算从 2000 年 1 月 1 日到该日期的秒数,再用 os.date() 函数转换为日期,进而计算季度号和季度天数。最后,将计算得到的结果以空格分隔输出。示例输出结果为 2021 6 4 85 65

2021-06-04 11:16:44