Módulo:Conversor de data

De WikiINRICRISTOpedia
Revisão de 23h13min de 28 de janeiro de 2017 por br>Luizdl (adicionando suporte para data com formato mês/dia/ano)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Descrição

O módulo é usado pela predefinição {{Conversor de data}}, e seu funcionamento está indicado em sua documentação.

Acrescentando estilos

Para acrescentar novos estilos de data para a conversão, deve-se acrescentar à variável patterns uma expressão regular que consiga detectar a data corretamente, obrigatoriamente na ordem dia, mês e ano.

Deve-se notar que expressões regulares em Lua têm uma sintaxe diferente do Regex comum.


local p = {}

local patterns = {"(%d+)-(%d+)-(%d+)", "(%d+)/(%d+)/(%d+)", "(%d+)%.(%d+)%.(%d+)"}
local month_names = {"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}

function p.main( frame )
	local date = frame.args[1]
	local day, month, year = 0, 0, 0
	
	for key, value in pairs(patterns) do
		local day, month, year = string.match(date, value)
		
		year = tonumber(year)
		day = tonumber(day)
		month = tonumber(month)
		
		-- Inverte dia pelo ano, caso o formato da data for xxxx/xx/xx
		if (day and day > 100) then
			day, year = year, day
		end
		
		-- Soma dois mil caso a data inserida for de dois dígitos
		if (year and year < 100) then
			year = year + 2000
		end
		
		-- Inverte dia pelo mes, caso o formato da data mês/dia/ano
		if (month and (month > 12 and month < 32)) then
			day, month = month, day
		end
		
		-- Algumas poucas páginas tinham erro de índice inexistente para o mês
		if (month and (month > 12 or month < 1)) then
			month = nil
		end
		
		if (day and month and year) ~= nil then
			return day .. " de " .. month_names[month] .. " de " .. year
		end
	end
	
	return date
end

return p