跳转到内容

模組:ISODate

被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由Where was I last night?留言 | 贡献2016年12月10日 (六) 14:33编辑。这可能和当前版本存在着巨大的差异。

require('Module:No globals')

local getArgs = require('Module:Arguments').getArgs
local p = {}

local function convert(input)
	input = input:gsub(" "," ");
	input = input:gsub("%s+"," ");
	local y, m, d

	-- Converts Chinese language dates into ISO 8601 format
	y, m, d = string.match(input, '^(%d+)年-(%d%d?)月(%d%d?)日$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', y .. '-' .. m .. '-' .. d)
	end

	y, m = string.match(input, '^(%d+)年(%d%d?)月$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m', y .. '-' .. m)
	end

	y = string.match(input, '^(%d+)年$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y', y)
	end

	-- Converts English language dates into ISO 8601 format

	m, y = string.match(input, '^(%a+) ?,? ?(%d+)$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m', input)
	end

	d, m, y = string.match(input, '^(%d%d?) ?(%a+) ?,? ?(%d+)$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', input)
	end

	m, d, y = string.match(input, '^(%a+) ?(%d%d?) ?,? ?(%d+)$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', input)
	end

	-- Tries to fix non-standard ISO 8601 format

	y = string.match(input, '^(%d+)$');
	if y then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y', input)
	end

	if string.match(input, '^%d+%-%d%d?%-%d%d?$') then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', input)
	end

	if string.match(input, '^%d+%-%d%d?$') then
		return mw.getCurrentFrame():callParserFunction('#time', 'Y-m', input)
	end

	-- Other cases

	return mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', 'error')
end

function p.dates(frame)
	local args = getArgs(frame)
	return p._dates(args)
end

function p._dates(args)
	local returnval = convert(args[1])
	local errorMessage = mw.getCurrentFrame():callParserFunction('#time', 'Y-m-d', 'error')

	if returnval == errorMessage and args.error == 'ignore' then
		return args[1]
	end

	return returnval
end

return p