模組討論:文白相雜

文出維基大典
跳至導覽 跳至搜尋

提议更改[]

我改了下代码,应该能修掉日期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)