Lua:获取季度数和季度天数

Lua: Obtaining number of quarters and day of quarter

我是 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  --seconds in a day

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

我想弄清楚的是两件事:

  1. 我应该如何操作该函数以准确获取自 2000 年 1 月 1 日以来某个日期的季度数? (即 2000 年 1 月 1 日 - 2000 年 3 月 31 日之间的任何 date_id = 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 算术上得到这个,或者我应该从一个完全不同的思路来思考?

谢谢!

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