模組:Date Convert
跳至導覽
跳至搜尋
本 枋模予人使用佇 approximately 5,200 抑 頂面,所以伊的改變會受著大範圍的注意。請佇界變進前先佇 馮摹的 /sandbox 抑 /testcases 次頁面試驗,或者是佇你家己的 用者取頁面.請佇實行改變進曾考慮先 佇 土論頁 參詳一咧。 |
本模块用于将各类日期转换为ISO 8601格式或中文日期,以方便{{#time:params}}
函数和其他模板调用。
用法[修改]
输出ISO日期[修改]
使用{{#invoke:Date_Convert|ISODate}}
函数。
输入完整日期,只输入年月、只输入年份皆可:
{{#invoke:Date_Convert|ISODate|1994 nî 10 goe̍h 26 ji̍t}}
→ 1994-10{{#invoke:Date_Convert|ISODate|1994 nî 10 goe̍h}}
→ 1994{{#invoke:Date_Convert|ISODate|1994 nî}}
→ 1994
当月和日是个位数时,十位加“0”或不加“0”皆可,模块会自动补“0”,
{{#invoke:Date_Convert|ISODate|1994 nî 8 goe̍h 1 ji̍t}}
→ 1994{{#invoke:Date_Convert|ISODate|1994 nî 08 goe̍h 01 ji̍t}}
→ 1994
可以转换英文和非规范的ISO 8601日期:
{{#invoke:Date_Convert|ISODate|October 26, 1994}}
→ 1994-10-26{{#invoke:Date_Convert|ISODate|26 Oct 1994}}
→ 1994-10-26{{#invoke:Date_Convert|ISODate|Sept 1994}}
→ 1994-09{{#invoke:Date_Convert|ISODate|1994-8-1}}
→ 1994-08-01{{#invoke:Date_Convert|ISODate|1994-8}}
→ 1994-08
如果字符串以正确的日期开头,则会转换并忽视后缀文字:
{{#invoke:Date_Convert|ISODate|1994年10月26日,武汉}}
→ 1994{{#invoke:Date_Convert|ISODate|1994年10月26日,武汉|suffix=yes}}
→ 1994年10月26日,武汉(将suffix
字段设为yes
展示后缀)
以不合法日期开头则报错:
{{#invoke:Date_Convert|ISODate|一九九四年十月二十六日}}
→ 错误:时间格式不正确{{#invoke:Date_Convert|ISODate|1994年13月32日}}
→ 1994{{#invoke:Date_Convert|ISODate|一九九四年十月二十六日|error=ignore}}
→ 一九九四年十月二十六日(将error
字段设为ignore
返回输入值)
ISO 8601标准只规定了1583年之后的日期标准,请勿用本模块表示这之前的日期,否则可能会得到不期待的结果:
{{#invoke:Date_Convert|ISODate|25年8月5日(东汉建立)|suffix=yes}}
→ 错误:时间格式不正确
而{{#invoke:ISODate|dates|xxx}}
等效於此{{#invoke:Date_Convert|ISODate|xxx}}
。
输出中文日期[修改]
使用{{#invoke:Date_Convert|ChineseDate}}
函数。
输入完整日期,只输入年月、只输入年份皆可:
{{#invoke:Date_Convert|ChineseDate|1994年10月26日}}
→ 1994 5î{{#invoke:Date_Convert|ChineseDate|1994年10月}}
→ 1994 5î{{#invoke:Date_Convert|ChineseDate|1994年}}
→ 1994 5î
当月和日是个位数时,十位加“0”或不加“0”皆可,模块会自动补“0”,
{{#invoke:Date_Convert|ChineseDate|1994年8月1日}}
→ 1994 5î{{#invoke:Date_Convert|ChineseDate|1994年08月01日}}
→ 1994 5î
可以转换英文和非规范的ISO 8601日期:
{{#invoke:Date_Convert|ChineseDate|October 26, 1994}}
→ 1994 10î 十月26 2600̍31{{#invoke:Date_Convert|ChineseDate|26 Oct 1994}}
→ 1994 10î 十月26 2600̍31{{#invoke:Date_Convert|ChineseDate|Sept 1994}}
→ 1994 9î 九月{{#invoke:Date_Convert|ChineseDate|1994-8-1}}
→ 1994 8î 八月1 100̍31{{#invoke:Date_Convert|ChineseDate|1994-8}}
→ 1994 8î 八月
如果字符串以正确的日期开头,则会转换并忽视后缀文字:
{{#invoke:Date_Convert|ChineseDate|1994年10月26日,武汉}}
→ 1994
以不合法日期开头则报错:
{{#invoke:Date_Convert|ChineseDate|一九九四年十月二十六日}}
→ 错误:时间格式不正确{{#invoke:Date_Convert|ChineseDate|1994年13月32日}}
→ 1994 5î{{#invoke:Date_Convert|ChineseDate|一九九四年十月二十六日|error=ignore}}
→ 一九九四年十月二十六日(将error
字段设为ignore
返回输入值)
ISO 8601标准只规定了1583年之后的日期标准,请勿用本模块表示这之前的日期,否则可能会得到不期待的结果:
{{#invoke:Date_Convert|ChineseDate|25年8月5日(东汉建立)}}
→ 错误:时间格式不正确
而{{#invoke:Date_Convert|ChineseDate|xxx}}
等效於此{{#invoke:Chinese_date|main|xxx}}
。
参见[修改]
require('Module:No globals') local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local p = {} local function error(template) return '<strong class="error">错误:时间格式不正确</strong>[[Category:Template:' .. template .. '使用錯誤]]' end local function time(format, object) return mw.getCurrentFrame():callParserFunction('#time', format, object) end local function convert(input) input = input :gsub(" "," ") :gsub("%s+"," ") :gsub('(%a+)[ ,]*(%d+)', '%1 %2'); local y, m, d, suf local datePatternList = { -- English date format {'%d%d? ?%a+[ ,]*%d+', 'Y-m-d'}, -- 26 Oct 1994 {'%a+ ?%d%d?[ ,]+%d+', 'Y-m-d'}, -- Oct 26, 1994 {'%a+[ ,]*%d%d%d%d+', 'Y-m'}, -- Oct 1994 {'%a+ ?%d%d?', 'Y-m-d'}, -- Oct 26 {'%d%d? *%a+', 'Y-m-d'}, -- 26 Oct -- Slash or hyphen date format {'%d+/%d%d?/%d+', 'Y-m-d'}, -- 1994/10/26 or 10/26/1994 {'%d+%.%d%d?%.%d+', 'Y-m-d'}, -- 1994.10.26 or 26.10.1994 {'%d%d?/%d%d?', 'Y-m-d'}, -- 10/26 {'%d+%-%d%d?%-%d+', 'Y-m-d'}, -- 1994-10-26 or 26-10-94 {'%d%d%d%d+%-%d%d?', 'Y-m'}, -- 1994-10 {'%d%d%d%d', 'Y'}, -- 1994 } y, m, d, suf = string.match(input, '^(%d+) nî (%d%d?) goe̍h (%d%d?) ji̍t (.*)$'); if y then if #y < 4 then y = string.rep(0, 4 - #y) .. y end return time('Y-m-d', y .. '-' .. m .. '-' .. d) , suf end y, m, suf = string.match(input, '^(%d+) nî (%d%d?) goe̍h (.*)$'); if y then if #y < 4 then y = string.rep(0, 4 - #y) .. y end return time('Y-m', y .. '-' .. m) , suf end y, suf = string.match(input, '^(%d+) nî (.*)$'); if y then if #y < 4 then y = string.rep(0, 4 - #y) .. y end return time('Y', y) , suf end m, d, suf = string.match(input, '^(%d%d?) goe̍h (%d%d?) ji̍t (.*)$'); if m and tonumber(m) then return time('m-d', m .. '-' .. d) , suf end for _, value in ipairs(datePatternList) do local str, suf = string.match(input, '^(' .. value[1] .. ')(.*)$'); if str then return time(value[2], str), suf end end return time('Y-m-d', 'error') end function p._converttime(input, showsuf) local date, suf = convert(input) if (yesno(showsuf)) then return date .. suf else return date end end function p._ChineseDate(args, error) local date, suffix = convert(args[1]) local errorMessage = time('Y-m-d', 'error') suffix = args.suf and suffix or '' if string.match(date, '^%d+%-%d%d%-%d%d$') then return time('Y nî Fj ji̍t', date):gsub("^0+","") .. suffix end if string.match(date, '^%d+%-%d%d$') then return time('Y nî F', date):gsub("^0+","") .. suffix end if string.match(date, '^%d+$') then return time('Y nî', date):gsub("^0+","") .. suffix end if string.match(date, '^%d%d%-%d%d$') then return time('Fj ji̍t', date):gsub("^0+","") .. suffix end if date == errorMessage and args.error == 'ignore' then return args[1] end --- return error('Chinese_date') return '<strong class="error">错误:时间格式不正确</strong>[[Category:Template:Chinese_date使用錯誤]]' end function p.ChineseDate(frame) local args = getArgs(frame) return p._ChineseDate(args) end function p._ISODate(args, error) local returnval, suf = convert(args[1]) local errorMessage = time('Y-m-d', 'error') if returnval == errorMessage and args.error == 'ignore' then return args[1] end if returnval == errorMessage then --- return error('ISODate') return '<strong class="error">错误:时间格式不正确</strong>[[Category:Template:ISODate使用錯誤]]' end return returnval .. (args.suffix and suf or '') end function p.ISODate(frame) local args = getArgs(frame) return p._ISODate(args) end return p