模組:文白相雜

文出維基大典

可在模組:文白相雜/doc建立此模組的說明文件

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 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
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 >= 1000000 then
        return '1'
    else
        return '0'
    end
end

return f