Module:Wikidata/Dates
Apparence
La documentation de ce module est générée par le modèle {{Documentation module}}.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
-- sert à récupérer des données usuelles sur Wikidata (les fonctions élémentaires pour l'extraction des données se fait sur Module:Wikidata
-- ce module peut-être appelé par Module:InfoboxBuilder/Helpers qui les met en infobox
local p = {}
local formatDate = require "Module:Date complexe"
local dateModule = require "Module:Date"
local numericprecision = { -- convertir les précisions en valeurs numériques = à celles utilisées par Wikidata
gigayear = 0,
megayear = 3,
millenium = 6,
century = 7,
decade = 8,
year = 9,
month = 10,
day = 11,
hour = 12,
minute = 12,
second = 14,
}
local function splitTimestamp(timestamp, calendar)
local era, year, month, day
era = string.sub(timestamp, 1, 1)
year = tonumber(string.sub(timestamp, 9, 12))
month = string.sub(timestamp, 14, 15)
day = string.sub(timestamp, 17, 18)
if calendar == 'julian' then
year, month, day = formatdate.gregorianToJulian( era .. year, month, day )
end
return {day = day, month = month, year = year, era = era, timestamp = timestamp, type = 'dateobject'}
end
function p.rangeobject(begin, ending, params)
local timestamp
if begin then
timestamp = begin.timestamp
else
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
function p.dateobject(orig, params) -- transforme un snak en un nouvel objet utilisable par Module:Date complexe
if not params then
params = {}
end
local newobj = splitTimestamp(orig.time, orig.calendar) -- initalise l'object en mettant la valeur des dates
-- ajoute la clé "precision"
newobj.precision = orig.precision
if params.precision then
local paramprec = tonumber(params.precision)
if not paramprec then-- si la valeur du paramètre n'est pas numérique or
paramprec = numericprecision[params.precision] -- que faire en cas de valeur invalide ?
end
if paramprec and paramprec < newobj.precision then
-- on peut afficher une valeur moins précise que celle stockée, mais plus précise n'aurait pas de sens
newobj.precision = paramprec
end
end
newobj.type = 'dateobject'
return newobj
end
function p.objecttotext(obj, params)
if obj.type == 'dateobject' then
return formatDate.simplestring(obj)
elseif obj.type == 'rangeobject' then
return formatDate.daterange(obj.begin, obj.ending, params)
end
end
function p.duration(range)
if not range.begin and range.ending then
return nil
else
a, b = range.begin, range.ending
end
return datemodule.age(a.year, a.month, a.day, b.year, b.month, b.day)
end
return p