Módulo:Datas
Revisão de 10h50min de 19 de julho de 2016 por br>!Silent (Modificou o nível de proteção de "Módulo:Datas": Módulo com impacto significativo em outras páginas ([Editar=Permitir apenas autorrevisores] (indefinidamente) [Mover=Permitir apenas autorrevisores] (indefinidamente)))
<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