模組討論:文白相雜
由User670839245在話題提议更改上作出的最新留言:五 年前
提议更改
纂我改了下代码,应该能修掉日期bug(见模板討論:文白相雜)。代码如下。(解释:用os.time可以获得以秒为单位的时间戳;两个时间戳相减直接得到秒数,不受跨年影响。)
local f = {} f.DATEPATTERN = '([〇一二三四五六七八九]-)年([〇一二三四五六七八九]-)月([〇一二三四五六七八九]-)日 ([一二三四五六日]-) ([〇一二三四五六七八九]-)時([〇一二三四五六七八九]-)分 %(UTC%)' local function chinese2num(s) local str = s str = string.gsub(str, '〇', '0') str = string.gsub(str, '零', '0') str = string.gsub(str, '一', '1') str = string.gsub(str, '二', '2') str = string.gsub(str, '三', '3') str = string.gsub(str, '四', '4') str = string.gsub(str, '五', '5') str = string.gsub(str, '六', '6') str = string.gsub(str, '七', '7') str = string.gsub(str, '八', '8') str = string.gsub(str, '九', '9') return tonumber(str) end local function date2num(date) local y,m,d,h,min = string.gmatch(date, f.DATEPATTERN)() if y and m and d and h and min then return os.time({year=chinese2num(y),chinese2num(m),day=chinese2num(d),hour=chinese2num(h),minute=chinese2num(min)}) --return chinese2num(y)*100000000+chinese2num(m)*1000000+chinese2num(d)*10000+chinese2num(h)*100+chinese2num(min) else return 0 end end local function curdate() --local t = os.date('!*t') --return t.year*100000000+t.month*1000000+t.day*10000+t.hour*100+t.min return os.time(os.date('!*t')) end local function extractdate(text) local x, y = text.find(text, f.DATEPATTERN) if not x then return '' end local date = string.sub(text, x, y) return date end function f.getdate(frame) local str = frame.args[1] or '' return extractdate(str) end function f.checkdate(frame) local str = frame.args[1] or '' local past = date2num(extractdate(str)) local now = curdate() if past ~= 0 and now - past >= 86400*30 then return '1' else return '0' end end return f
User670839245(讨论|本地贡献|本地封禁 (本地封禁日志) ? ) 二〇一九年一月一四日 (一) 一三時〇二分 (UTC)