跳转到内容

模組:ISODate

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

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

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

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

function p._dates(args)
	args[1] = args[1]:gsub(" "," ");
	args[1] = args[1]:gsub("%s+"," ");
	-- Converts Chinese language dates into ISO 8601 format

	local y, m, d

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

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

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

	-- Converts English language dates into ISO 8601 format

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

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

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

	-- Tries to fix non-standard ISO 8601 format

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

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

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

	-- Other cases

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

end

return p