Saltar para o conteúdo

Módulo:ISO

Fonte: Wikinotícias
Documentação Documentação de módulo

Módulo:ISO/doc converte uma data (por exemplo, 17 de janeiro de 2000) para o formato ISO 8601 (por exemplo, 2000-01-17). Este modelo foi projetado para pré-processar datas para uso com a função de analisador #time.

Adaptação para língua portuguesa está disponível na predefinição {{ISO}}. Isso é utilizado em Wikinotícias:COINS e afeta todas as predefinições de citação.

Uso

{{#invoke:ISO|ISODate|data escolhida}}

Exemplo

  • {{#invoke:ISO|ISODate|October 26, 1994}} → 1994-10-26
  • {{#invoke:ISO|ISODate|26 Oct 1994}} → 1994-10-26
  • {{#invoke:ISO|ISODate|Sept 1994}} → 1994-09
  • {{#invoke:ISO|ISODate|1994-8-1}} → 1994-08-01
  • {{#invoke:ISO|ISODate|1994-8}} → 1994-08

Ver também

Esta documentação se encontra na subpágina Módulo:ISO/doc (editar | histórico)
Por favor inclua as categorias à subpágina /doc. Subpáginas deste módulo.

require('strict')

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

local function error(template)
	return '<strong class="error">(erro)</strong>[[Category:!Notícias com erros]]'
end

local function time(format, object)
	return mw.getCurrentFrame():callParserFunction('#time', format, object)
end

local function convert(input)
	input = input
		:gsub("&nbsp;"," ")
		: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
	}

	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._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">(erro)</strong>[[Category:!Notícias com erros]]'
	end
	return returnval .. (args.suffix and suf or '')
end

function p.ISODate(frame)
	local args = getArgs(frame)
	return p._ISODate(args)
end

return p