La documentación pa esti módulu pue crease en Módulu:Wikidata/Data/usu

local p = {}
local Fechas = require( 'Módulu:Dates')
local Romanos = require('Módulu:Númberos').Romano
local enlace

local function enlazar(etiqueta)
    if enlace == 'no' then
        return etiqueta
    else
        return '[['.. etiqueta ..']]'
    end
end

function formatear(fechahora, opciones)
    local etiqueta  = fechahora.label
    local timestamp = fechahora.time
    local precision = fechahora.precision    

    -- Descodificar el timestamp.
    --if true then return timestamp end
    local signo, annoSinSigno, mes, dia = timestamp:match("(%W)(%d+)%-(%d+)%-(%d+)")
    
    annoSinSigno = tonumber(annoSinSigno)
    
     -- Obtener la dómina
    local era = ''
    
    if signo == '-' then
        era = ' e. C.'
        annoConSigno = - annoSinSigno
    elseif annoSinSigno == 0 then -- Por comprobar si tovía ye asina.
        annoSinSigno         = 1
        annoConSigno = -1
        era = ' e. C.'
    else
        annoConSigno = annoSinSigno
    end
    
    -- Informar el calendariu
    local calendario 
    local mostrarCalendario = ''
    
    if fechahora.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then
        calendario = 'xulianu'
        mostrarCalendario = '<sup>xulianu</sup>'
    else
        calendario = 'gregorianu'
    end

    -- Informar l'enllaz utilizáu na función enllazar. CUDIÁU: Nun ha definise como llocal
    enlace    = opciones.enlace

    if precision == 11 then      -- Data de la que se conoz l'añu, el mes y el día
        if opciones['formatoFecha'] == 'añu' then
            return enlazar(annoSinSigno) .. mostrarCalendario .. era -- Devolver l'añu namái
        else
           return Fechas.Fecha({dia,mes,annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})
        end
    elseif precision == 10 then  -- Data de la que se conoz l'añu y el mes
        if opciones['formatoFecha'] == 'añu' then
            return enlazar(annoSinSigno) .. mostrarCalendario .. era -- Devolver solo l'añu
        else
            return Fechas.Fecha({'',mes,annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})        
        end
    elseif precision == 9  then  -- Data de la que se conoz l'añu
        return Fechas.Fecha({'','',annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})        
    elseif precision == 8  then  -- Data de la que se conoz la década
        local decada = math.floor(annoSinSigno/10)*10
        return enlazar('años '.. decada .. era) .. mostrarCalendario            
    elseif precision == 7  then  -- Data de la que se conoz el sieglu
        --Exemplos: 
        --   Eleno de Céspedes     +1600-00-00T00:00:00Z --> sieglu XVI
        --    
        local siglo = Romanos(math.floor(annoSinSigno/100))
        
        if opciones['mayúscula'] == 'sí' then
            return enlazar('Sieglu ' .. siglo .. era)    .. mostrarCalendario
        else
            return enlazar('sieglu ' .. siglo .. era)    .. mostrarCalendario        
        end
    elseif precision == 6  then  -- Data de la que se conoz el mileniu
        local milenio = Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio .. ' mileniu'.. era).. mostrarCalendario
    elseif precision == 5  then  -- Data de la que se conoz 10 000 años
         local milenio =  Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio .. ' mileniu'.. era)
    elseif precision == 4  then  -- Data de la que se conoz 100 000 años 
          local milenio =  Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio.. ' mileniu'.. era)       
    elseif precision == 3  then  -- Data de la que se conoz los millones d'años
        return math.floor(annoSinSigno/1000000) .. ' millones d\'años' .. era  
    elseif precision == 2  then  -- Data de la que se conoz los 10 millones d'años
        return math.floor(annoSinSigno/1000000) .. ' millones d\'años' .. era 
    elseif precision == 1  then  -- Data de la que se conoz los 100 millones d'años
        return math.floor(annoSinSigno/1000000) .. ' millones de años' .. era 
    else
        return "<span class=error>Triba de datu desconocida.</span>"        
    end    
end

function p.FormateaFechaHora(fechahora, opciones, calificativos)
    local idCircunstancia
        
    if calificativos                          and
       calificativos["P1480"]                 and -- circunstancies de la referencia
       calificativos["P1480"][1]              and
       calificativos["P1480"][1]['datavalue'] and
       calificativos["P1480"][1]['datavalue']['value'] then
               
        idCircunstancia = calificativos["P1480"][1]['datavalue']['value']['numeric-id']
               
        if idCircunstancia == 5727902 then -- circa
            return '[[circa|c.]]&nbsp;' .. formatear(fechahora, opciones)
        end
    end
    
    -- Valor por defeutu si nun se supo formatiar usando'l calificativu
    return formatear(fechahora, opciones)
end

return p