Esta documentación está transcluída desde Módulo:Wikidata/Data/uso. Os editores poden probar cambios no mesmo en Módulo:Wikidata/Data/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 p = {}
local Datas = require( 'Módulo:Datas')
local Romanos = require('Módulo:Números').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

    -- Decodificar o timestamp.
    --if true then return timestamp end
    local signo, annoSinSigno, mes, dia = timestamp:match("(%W)(%d+)%-(%d+)%-(%d+)")

    annoSinSigno = tonumber(annoSinSigno)

     -- Obter a era
    local era = ''

    if signo == '-' then
        era = ' a. C.'
        annoConSigno = - annoSinSigno
    elseif annoSinSigno == 0 then -- Por comprobar se é así.
        annoSinSigno         = 1
        annoConSigno = -1
        era = ' a. C.'
    else
        annoConSigno = annoSinSigno
    end

    -- Informar o calendario
    local calendario
    local mostrarCalendario = ''

    if fechahora.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then
        calendario = 'juliano'
        mostrarCalendario = '<sup>xuliano</sup>'
    else
        calendario = 'gregoriano'
    end

    -- Informar a ligazón utilizado na función ligar. OLLO: Non debe definirse como local
    enlace    = opciones.enlace

    if precision == 11 then      -- Data da que se coñece o ano, o mes e o día
        if opciones['formatoFecha'] == 'año' then
            return enlazar(annoSinSigno) .. mostrarCalendario .. era -- Devolver só o ano
        else
           return Datas.Data({dia,mes,annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})
        end
    elseif precision == 10 then  -- Data da que se coñece o ano e o mes
        if opciones['formatoFecha'] == 'año' then
            return enlazar(annoSinSigno) .. mostrarCalendario .. era -- Devolver só o ano
        else
            return Datas.Data({'',mes,annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})
        end
    elseif precision == 9  then  -- Data da que se coñece o ano
        return Datas.Data({'','',annoConSigno;enlace=opciones.enlace;calendario=calendario;['mayúscula']=opciones['mayúscula']})
    elseif precision == 8  then  -- Data da que se coñece a década
        local decada = math.floor(annoSinSigno/10)*10
        return enlazar('anos '.. decada .. era) .. mostrarCalendario
    elseif precision == 7  then  -- Data da que se coñece o século
        --Exemplos:
        --   Eleno de Céspedes     +1600-00-00T00:00:00Z --> século XVI
        --
        local siglo = Romanos(math.floor(annoSinSigno/100))

        if opciones['mayúscula'] == 'sí' then
            return enlazar('Século ' .. siglo .. era)    .. mostrarCalendario
        else
            return enlazar('século ' .. siglo .. era)    .. mostrarCalendario
        end
    elseif precision == 6  then  -- Data da que se coñece o milenio
        local milenio = Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio .. ' milenio'.. era).. mostrarCalendario
    elseif precision == 5  then  -- Data da que se coñece 10 000 anos
         local milenio =  Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio .. ' milenio'.. era)
    elseif precision == 4  then  -- Data da que se coñece 100 000 anos
          local milenio =  Romanos(math.floor(annoSinSigno/1000))
        return enlazar(milenio.. ' milenio'.. era)
    elseif precision == 3  then  -- Data da que se coñecen os millóns de anos
        return math.floor(annoSinSigno/1000000) .. ' millóns de anos' .. era
    elseif precision == 2  then  -- Data da que se coñecen os 10 millóns de anos
        return math.floor(annoSinSigno/1000000) .. ' millóns de anos' .. era
    elseif precision == 1  then  -- Data da que se coñecen os 100 millóns de anos
        return math.floor(annoSinSigno/1000000) .. ' millóns de anos' .. era
    else
        return "<span class=error>Tipo de dato descoñecido.</span>"
    end
end

function p.FormateaFechaHora(fechahora, opciones, calificativos)
    local idCircunstancia

    if calificativos                          and
       calificativos["P1480"]                 and -- circunstancias da referenza
       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 defecto se non se soubo formatear usando o cualificativo
    return formatear(fechahora, opciones)
end

return p