Módulo:Datas
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Este módulo é usado em mais de 135 000 páginas. (Ver Wikihelp: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:Datas/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
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á}}
→ Predefinição:Chaves-abre#invoke:datas|ISO_8601|blá}} Predefinição:Big
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