Menú alternativo
Toggle preferences menu
Menú alternativo personal
No has accedido
Tu dirección IP será visible si haces alguna edición

Uso

Este módulo proporciona operaciones sobre fechas.

Funciones

fecha

Formatea una fecha. Sintaxis:

{{#Invoke:Fechas|fecha|<día>|<mes>|<año>}}
Parámetros
  • enlace:
  • calendario: si toma el valor "juliano"
  • mayúscula: si debe poner la fecha en mayúsculas
Ejemplos
  • {{#Invoke:Fechas|Fecha|01|04|010}}1 de abril de 10
  • {{#Invoke:Fechas|Fecha|2|4|2010}}2 de abril de 2010
  • {{#Invoke:Fechas|Fecha||02|-1980}}febrero de 1980 a. C.
  • {{#Invoke:Fechas|Fecha||enero|0980}}enero de 980
  • {{#Invoke:Fechas|Fecha|||-0980|enlace=no}} → 980 a. C.
  • {{#Invoke:Fechas|Fecha||enero|0980|mayúscula=sí}}Enero de 980
  • {{#Invoke:Fechas|Fecha}}
  • {{#Invoke:Fechas|Fecha|1=|2=|3=}}
  • {{#Invoke:Fechas|Fecha|26|4|1564|calendario=juliano}}26 de abril de 1564jul.

numérica

Convierte una fecha tipo «día de mes de año» en una cadena numérica.

Ejemplos
  • {{#invoke:Fechas|Numerica|24 de diciembre de 2014}} → 20141224
  • {{#invoke:Fechas|Numerica|24 de diciembre del 2014}} → 20141224
  • {{#invoke:Fechas|Numerica|4 de Enero de 1913}} → 19130104
  • {{#invoke:Fechas|Numerica|2 de MARZO de 14}} → 00140302
  • {{#invoke:Fechas|Numerica|2 de septiembre de 1976}} → 19760902
  • {{#invoke:Fechas|Numerica|20141224}}Cadena de fecha no válida
  • {{#invoke:Fechas|Numerica|15 de setiembre de 1976Cualquier cosa}} → 19760902
  • {{#invoke:Fechas|Numerica|Cualquier cosa}}Cadena de fecha no válida
  • {{#invoke:Fechas|Numerica|dd}}Cadena de fecha no válida
  • {{#invoke:Fechas|Numerica|2 de turrón de 1880}}Cadena de fecha no válida

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>[[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