Módulo:Datas
Aspeto
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 135 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
Este é um módulo para conversão de formatos de datas.
Uso
Função ISO_8601
Converte uma data escrita por extenso para o formato ISO 8601 (AAAA-MM-DD, reconhecível pela #time). Caso a data não esteja no formato esperado, devolve um erro (que pode ser capturado pela #iferror).
Exemplos
{{#invoke:datas|ISO_8601|5 de março de 2014}}
→ 2014-03-05{{#invoke:datas|ISO_8601|Dezembro de 2000}}
→ 2000-12{{#invoke:datas|ISO_8601|1980}}
→ 1980{{#invoke:datas|ISO_8601|blá}}
→ {{#invoke:datas|ISO_8601|blá}} Erro Lua na linha34: formato de data inesperado.
local modulo = {}
function modulo.ISO_8601 (frame)
local meses = {janeiro = 1, fevereiro = 2, ["março"] = 3, abril = 4, maio = 5, junho = 6, julho = 7, agosto = 8, setembro = 9, outubro = 10, novembro = 11, dezembro = 12}
local function mes_em_numero (mes) -- função auxiliar que converte para minúscula antes de usar a tabela meses
if mes == nil then
return nil
else
mes = mw.ustring.lower (mes)
return meses[mes]
end
end
local dia, mes, ano, entrada
entrada = frame.args[1]
entrada = mw.text.trim (entrada) -- tira espaços do começo e do fim
mes, ano = mw.ustring.match (entrada, "^(%a+) de (%d+)$") -- formato com mês e ano (primeiro pois é o mais comum)
mes = mes_em_numero (mes)
if mes ~= nil then
return string.format ("%.4d-%.2d", ano, mes)
else
dia, mes, ano = mw.ustring.match (entrada, "^(%d%d?) de (%a+) de (%d+)$") -- formato com dia, mês e ano
mes = mes_em_numero (mes)
if dia ~= nil and mes ~= nil then
return string.format ("%.4d-%.2d-%.2d", ano, mes, dia)
else
ano = mw.ustring.match (entrada, "^(%d+)$") -- formato com apenas ano
if ano ~= nil then
return string.format ("%.4d", ano)
else
error ("formato de data inesperado")
end
end
end
end
return modulo