Modul:WikidataUtils/Time/Interval
Aspect

Implementează {{Interval de timp de la Wikidata}}
local Wikidata = require('Modul:Wikidata')
local getArgs = require('Modul:Arguments').getArgs
local DateUtils = require('Modul:DateUtils')
local p = {}
local endash = mw.text.decode('–')
local printDateFromSnak = function(snak)
return DateUtils.formatDate(DateUtils.parseWikidataDate(snak))
end
p.fromArgs = function(property, q, startProp, endProp, instantProp)
local start = {prop = startProp}
local endd = {prop = endProp}
local instant = {prop = instantProp}
if p then
local claims = Wikidata.findBestClaimsForProperty(q, property)
if claims then
for _,eachClaim in ipairs(claims) do
if Wikidata.isClaimTrue(eachClaim) then
if eachClaim.qualifiers then
for _,eachMoment in {start, endd, instant} do
if Wikidata.isValueSnak(eachClaim.qualifiers[moment.prop]) then
moment.snak = eachClaim.qualifiers[moment.prop]
end
end
end
end
end
end
else
for _,eachMoment in {start, endd, instant} do
local momentClaims = Wikidata.findBestClaimsForProperty(q, moment.prop)
if momentClaims then for _,eachMomentClaim in ipairs(momentClaims) do
if Wikidata.hasValueSnak(eachMomentClaim) and Wikidata.isClaimTrue(eachMomentClaim) then
moment.snak = eachMomentClaim.mainsnak
end
end end
end
end
if start.snak and endd.snak then
return printDateFromSnak(start.snak) .. endash .. printDateFromSnak(endd.snak)
elseif start.snak then
return printDateFromSnak(start.snak) .. endash .. "''prezent''"
elseif endd.snak then
return 'până la ' .. printDateFromSnak(endd.snak)
elseif instant.snak then
return printDateFromSnak(instant.snak)
end
return nil
end
p.fromArray = function(array)
local q = array.q or mw.wikibase.getEntityIdForCurrentPage()
local p = array.p
local startProp = array[1] or 'P580'
local endProp = array[2] or 'P582'
local instantProp = array[3] or 'P585'
return p.fromArgs(p, q, startProp, endProp, instantProp)
end
p.fromFrame = function(frame)
local args = getArgs(frame)
return p.fromArray(args)
end
return p