La documentación para este módulo puede ser creada en Módulo:Fechas/doc
local z = {} local meses = { 'enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'} function z.NombreDelMes(mes) -- Función que devuelve el nombre del mes, donde mes es un número entre 1 y 12. -- Si no es así se devuelve el valor de mes. -- Por ejemplo, 2 --> febrero -- 02 --> febrero -- abril --> abril -- MAYO --> MAYO return meses[tonumber(mes)] or mes end function z.Fecha(frame) -- Función que formatea una fecha -- El único parámetro obligatorio es el año o 3. -- Obtener los argumentos con los que se llama a la función local argumentos = {} local parent = {} if frame == mw.getCurrentFrame() then if frame.args[3] or frame.args["año"] then argumentos = frame.args else parent = frame:getParent() argumentos = parent.args end else argumentos = frame end local enlace = argumentos["enlace"] ~= "no" -- Obtener el día, el nombre del mes y el año incluyendo para los años negativos a.d. local dia = argumentos["día"] or argumentos[1] or '' if dia ~='' then dia=tonumber(dia) or dia -- Eliminar ceros a la izquierda del día. end local mes = argumentos["mes"] or argumentos[2] or '' if mes~='' then mes =meses[tonumber(mes)] or mes end local anyo=tonumber(argumentos["año"] or argumentos[3]) or 0 if anyo < 0 then anyo = -anyo .. ' a. C.' end local calendario = '' if argumentos["calendario"] == 'juliano' then calendario = '<sup>[[:w:Calendario juliano|jul.]]</sup>' end -- Formatear la fecha dependiendo de si el día, el mes o el año están informados if dia ~='' then if enlace then return '[[' .. dia .. ' de ' .. mes .. ']] de [[' .. anyo .. ']]' .. calendario else return dia .. ' de ' .. mes .. ' de ' .. anyo .. calendario end elseif mes~='' then if argumentos["mayúscula"] == 'sí' then mes = mw.language.new('es'):ucfirst(mes) end if enlace then return '[[' .. mes .. ']] de [[' .. anyo .. ']]' else return mes .. ' de ' .. anyo end elseif anyo ~= 0 then if enlace then return '[[' .. anyo .. ']]' else return tostring(anyo) end end end function getNumeroMes(nombreMes) local numeroMes = '' local nombreMeses = { ['01'] = 'enero', ['02'] = 'febrero', ['03'] = 'marzo', ['04'] = 'abril', ['05'] = 'mayo', ['06'] = 'junio', ['07'] = 'julio', ['08'] = 'agosto', ['09'] = 'septiembre', ['9'] = 'setiembre', ['10'] = 'octubre', ['11'] = 'noviembre', ['12'] = 'diciembre' } for k, n in pairs(nombreMeses) do if nombreMeses[k] == mw.ustring.lower(nombreMes) then numeroMes = k end end if numeroMes == nil or numeroMes == '' then numeroMes = '00' end return numeroMes end function setString(cadena) local dia, mes, anno local error = '<strong class="error">Cadena de fecha no válida</strong>' local valorDia = mw.ustring.gsub(cadena,'(%d+) de %a+ del? %d+.*','%1') if valorDia == nil or valorDia == '' or mw.ustring.len(valorDia) > 2 or type(tonumber(valorDia)) ~= 'number' then return error else dia = mw.ustring.format('%02d', tonumber(valorDia)) end local valorMes = getNumeroMes(mw.ustring.gsub(cadena,'%d+ de (%a+) del? %d+.*','%1')) if valorMes == '00' then return error else mes = mw.ustring.format('%02d',tonumber(valorMes)) end local valorAnno = mw.ustring.gsub(cadena,'%d+ de %a+ del? (%d+).*','%1') if valorAnno == nil or valorAnno == '' or type(tonumber(valorAnno)) ~= 'number' then return error else anno = mw.ustring.format('%04d',tonumber(valorAnno)) end local newCadena = anno..mes..dia return newCadena end function z.Numerica(frame) return setString(frame.args[1]) end return z