Módulo:Conversor de data
Revisão de 23h13min de 28 de janeiro de 2017 por br>Luizdl (adicionando suporte para data com formato mês/dia/ano)
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 mais de 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 predefinição de testes ou em Módulo:Conversor de data/Testes (ou ainda em sua pá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 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