将 Unix 时间转换为月份?

使用 os.time,我可以得到自 Unix 纪元(Unix 时间戳)以来经过了多少个月

我只需要它作为一个月份 ID,所以任何一种数字都可以,只要它每个月都会改变,而且它可以被反转以获取实际的月份。

点赞
用户719263
用户719263

这可能会有用:

print (os.date("*t",os.time())["month"])

os.time()返回当前日期的数字。os.date(“* t”,...)将其转换为一个表格,其中“month”等于对应于日期的月份的数字。

2016-02-13 12:02:44
用户5352026
用户5352026
--定义函数GetMonth,输入参数seconds(秒)
local function GetMonth(seconds)
    --定义dayduration为每天的秒数
    local dayduration,year = 3600*24
    --定义days为每个月的天数(注意:2月份天数要根据闰年还是平年来判断)
    local days={31,0,31,30,31,30,31,31,30,31,30,31}
    
    --从1970年到10000年循环,找出当前是哪一年(year)
    for i=1970,10000 do -- For some reason too lazy to use while
        --闰年366天,平年365天
        local yeardays = i%4 == 0 and i%100 ~= 0 and 366 or 365
        --yearduration为当前循环年份的总秒数
        local yearduration = dayduration * yeardays
        --如果当前总秒数大于yearduration,就减去yearduration,继续循环
        if yearduration < seconds then
            seconds = seconds - yearduration
        else
        --否则当前循环年份就为year,结束循环
            year = i break
        end
    end
    --根据year的值,修改2月份的天数
    days[2]=(year%4==0) and 29 or 28
    --去掉整年份的总秒数,seconds变为当年剩下的秒数
    seconds = seconds%(365*24*3600)
    --循环判断当前是哪一个月
    for i=1,12 do
        --如果当前秒数大于当前月份的总秒数,就减去当前月份的总秒数,继续循环
        if seconds>days[i]*dayduration then
            seconds=seconds-days[i]*dayduration
        else
        --否则返回月份数(i + year*12)作为unique ID
            return --i + year*12 <-- If you want a unique ID
        end
    end
end

目前,该函数将返回数字2,因为现在是2月。如果你取消最后的注释并去除空格,你将得到数字554,表示自历元时以来我们目前正值第554个月。

正如Jean-Baptiste Yunès在他的回答的评论中所说的,我不确定你的句子:

注意:这是为Lua编写的,但我无法使用os.date。

是因为你没有os.date,还是因为你不知道如何使用它。你已经有了两个答案,可以使用你需要的那个。

2016-02-13 12:23:36