首页 > 解决方案 > Lua:获取季度数和季度日

问题描述

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

我有一个数据库,它在 INTEGER 值中有一个 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 算术上得到这个,或者我应该从一个完全不同的思路来思考?

谢谢!

标签: datedatetimelua

解决方案


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

推荐阅读