Diferencia entre revisiones de «Módulo:Fechas»

De Hispanopedia
No devolver nada si no se informa el año
Supremo (discusión | contribs.)
m 46 revisiones importadas
 
(No se muestran 29 ediciones intermedias de 9 usuarios)
Línea 15: Línea 15:


function z.Fecha(frame)
function z.Fecha(frame)
-- Función que formatea una fecha
    -- Función que formatea una fecha
-- El único parámetro obligatorio es el año o 3.
    -- El único parámetro obligatorio es el año o 3.
-- Obtener los argumentos con los que se llama a la función
    -- Obtener los argumentos con los que se llama a la función
 
     local argumentos = {}
     local argumentos = {}
     local parent     = {}
     local parent = {}
     if frame == mw.getCurrentFrame() then
     if frame == mw.getCurrentFrame() then
         if  frame.args[3]  or frame.args["año"]  then
         if  frame.args[3]  or frame.args["año"]  then
Línea 30: Línea 31:
         argumentos = frame
         argumentos = frame
     end
     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.
     -- 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 ''     
     local dia = argumentos["día"] or argumentos[1] or ''     
     if dia ~='' then  
     if dia ~='' then  
     dia=tonumber(dia) -- Eliminar ceros a la izquierda del día.
     dia=tonumber(dia) or dia -- Eliminar ceros a la izquierda del día.
     end
     end
     local mes = argumentos["mes"] or argumentos[2] or ''
     local mes = argumentos["mes"] or argumentos[2] or ''
Línea 43: Línea 46:
     if anyo < 0 then
     if anyo < 0 then
     anyo = -anyo .. ' a. C.'
     anyo = -anyo .. ' a. C.'
    end
   
    local calendario = ''
   
    if argumentos["calendario"] == 'juliano' then
    calendario = '<sup>[[Calendario juliano|jul.]]</sup>'
     end
     end


     -- Formatear la fecha dependiendo de si el día, el mes o el año están informados
     -- Formatear la fecha dependiendo de si el día, el mes o el año están informados
     if dia ~='' then
     if dia ~='' then
     return dia .. ' de ' .. mes .. ' de ' .. anyo
     if enlace then
      return '[[' .. dia .. ' de ' .. mes .. ']] de [[' .. anyo .. ']]' .. calendario
    else
      return dia .. ' de ' .. mes .. ' de ' .. anyo .. calendario
    end
     elseif mes~='' then
     elseif mes~='' then
    return  mes .. ' de ' .. anyo
        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
     elseif anyo ~= 0 then
     return anyo
        if enlace then
end
        return '[[' .. anyo .. ']]'
end
     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
return z

Revisión actual - 13:33 18 oct 2023

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