Módulo:Datas
Ir para navegação
Ir para pesquisar
<section begin=header />
| 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 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 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. |
<section end=header />
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