Módulo:Datas
Ir para navegação
Ir para pesquisar
40x40px | 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. |
40x40px | 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