Indicacións de uso do módulo

Obxectivo editar

Fornece capacidades para facer operacións sobre datas.

Uso editar

Data editar

Formatea uhna data. Sintaxe:

{{#Invoke:Fechas|Data|<día>|<mes>|<ano>}}
Parámetros
  • enlace:
  • calendario: se toma o valor "xuliano"
  • maiúscula: se debe poñer a data en maiúsculas
Ejemplos
  • {{#Invoke:Datas|Data|01|04|010}}1 de abril de 10
  • {{#Invoke:Datas|Data|2|4|2010}}2 de abril de 2010
  • {{#Invoke:Datas|Data||02|-1980}}febreiro de 1980 a. C.
  • {{#Invoke:Datas|Data||xaneiro|0980}}xaneiro de 980
  • {{#Invoke:Datas|Data|||-0980|enlace=non}} → 980 a. C.
  • {{#Invoke:Datas|Data||xaneiro|0980|mayúscula=sí}}xaneiro de 980
  • {{#Invoke:Datas|Data}}
  • {{#Invoke:Datas|Data|1=|2=|3=}}
  • {{#Invoke:Datas|Data|26|4|1564|calendario=xuliano}}26 de abril de 1564xul.

numérica editar

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

Ejemplos
  • {{#Invoke:Datas|Numerica|24 de decembro de 2014}} → 20141224
  • {{#Invoke:Datas|Numerica|4 de Xaneiro de 1913}} → 19130104
  • {{#Invoke:Datas|Numerica|2 de MARZO de 14}} → 00140302
  • {{#Invoke:Datas|Numerica|2 de setembro de 1976}} → 19760902
  • {{#Invoke:Datas|Numerica|15 de setembro de 1976Calquera cousa}} → 19760915
  • {{#Invoke:Datas|Numerica|Calquera cousa}}Cadea de data non válida
  • {{#Invoke:Datas|Numerica|dd}}Cadea de data non válida
  • {{#Invoke:Datas|Numerica|2 de turrón de 1880}}Cadea de data non válida
Esta documentación está transcluída desde Módulo:Datas/uso. Os editores poden probar cambios no mesmo en Módulo:Datas/probas.
Por favor, engade as categorías na subpáxina de documentación e os interwikis no Wikidata. Ver as subpáxinas deste módulo.

local z = {}

local meses = {
       'xaneiro','febreiro','marzo','abril','maio','xuño','xullo','agosto','setembro','outubro','novembro','decembro'}

function z.NombreDelMes(mes)
  -- Función que devolve o nome do mes, onde mes é un número entre 1 e 12.
  -- Se non é así devólvese o valor de mes.
  -- Por exemplo, 2  --> febreiro
  --              02 --> febreiro
  --              abril --> abril
  --              MAIO --> MAIO
   return meses[tonumber(mes)] or mes
end

function z.Data(frame)
    -- Función que formatea unha data
    -- O único parámetro obrigatorio é o ano ou 3.
    -- Obter os argumentos cos que se chama á función

    local argumentos = {}
    local parent = {}
    if frame == mw.getCurrentFrame() then
        if   frame.args[3]  or frame.args["ano"]  then
    	    argumentos = frame.args
        else
    	    parent = frame:getParent()
            argumentos = parent.args
        end
    else
        argumentos = frame
    end

    local enlace = argumentos["enlace"] ~= "non" and argumentos["enlace"] ~= "no"

    -- Obter o día, o nome do mes e o ano incluíndo para os anos negativos a.d.
    local dia = argumentos["día"] or argumentos[1] or ''
    if dia ~='' then
    	dia=tonumber(dia) or dia -- Eliminar ceros á esquerda do 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["ano"] or argumentos[3]) or 0
    if anyo < 0 then
    	anyo = -anyo .. ' a. C.'
    end

    local calendario = ''

    if argumentos["calendario"] == 'xuliano' then
    	calendario = '<sup>[[Calendario xuliano|xul.]]</sup>'
    end

    -- Formatar a data dependendo de se o día, o mes ou o ano 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["maiúscula"] == 'sí' then
            mes = mw.language.new('gl'):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 anyo
    	end
     end
 end
 function getNumeroMes(nombreMes)
     local numeroMes = ''
     local nombreMeses = {
    	 ['01'] = 'xaneiro', ['02'] = 'febreiro', ['03'] = 'marzo', ['04'] = 'abril', ['05'] = 'maio', ['06'] = 'xuño', ['07'] =  'xullo', ['08'] =  'agosto',
    	 ['09'] =  'setembro', ['9'] =  'setembro', ['10'] = 'outubro',  ['11'] =  'novembro', ['12'] =  'decembro'
    	 }
     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">Cadea de data non válida</strong>'
     local valorDia = mw.ustring.gsub(cadena,'(%d+) de %a+ de? %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+) de? %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+ de? (%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