Módulo:Conversor de data
Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar. |
Este módulo é usado em aproximadamente 500 000 páginas. (Ver Wikipedia:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na subpágina de testes deste módulo, na subpágina de testes de módulos (ou ainda em sua subpágina de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
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 month_names = {"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}
local function d_m_y(day, month, year)
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
return nil
end
local function m_y(month, year)
year = tonumber(year)
month = tonumber(month)
-- Retorna nil se nenhum dos números for ano maior que 1000
if not year or not month or (year < 1000 and month < 1000) then
return nil
end
-- Inverte mês pelo ano, caso o formato da data ano/mês
if month > 1000 then
month, year = year, month
end
-- Algumas poucas páginas tinham erro de índice inexistente para o mês
if month > 12 or month < 1 then
return nil
end
if (month and year) ~= nil then
return month_names[month] .. " de " .. year
end
return nil
end
function p.main(frame)
local date = frame.args[1]
local converted
local day, month, year = string.match(date, "^(%d+)[/%.%-](%d+)[/%.%-](%d+)$")
if day then
converted = d_m_y(day, month, year)
else
month, year = string.match(date, "^(%d+)[/%.%-](%d+)$")
converted = m_y(month, year)
end
return converted or date
end
return p