Module:Date complexe
Εμφάνιση

-- Translates and format date range sand other non punctual dates
--inspired by [[Commons:Module:Other dates]]
local datemodule = require('Module:Date')
local p = {}
--[[ wikibase format
precision =
0: 1 Gigayear
1: 100 Megayears
2: 10 Megayears
3: Megayear
4: 100 Kiloyears
5: 10 Kiloyears
6: Kiloyear
7: 100 years
8: 10 years
9: years
10: months
11: days
12: hours
13: minutes
14: seconds
]]--
local function totext(obj, lang, case)
return datemodule.Wikibasedate(obj, lang, case)
end
local function from(startpoint, lang)
local precision = tonumber(startpoint.precision)
local value =
function()
if precision > 10 then -- precision > month
return "à partir du " .. totext(startpoint, lang)
else
return "à partir de " .. totext(startpoint, lang)
end
end
return value()
end
local function fromuntil(startpoint, endpoint, lang)
local precision = tonumber(startpoint.precision) -- may need 2 precisions for start and end
local value =
function() -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013"
if precision > 10 then -- precision > month
return "du " .. totext(startpoint, lang) .. " au " .. totext(endpoint, lang)
else
-- "DE septebmbre" / "D'octobre"
return require('Module:Linguistic').of(totext(startpoint, 'fr'), 'fr') .. " à " .. totext(endpoint, lang)
end
end
return value()
end
local function upto(endpoint, lang)
local precision = tonumber(endpoint.precision) -- may need 2 precisions for start and end
local value =
function()
if precision > 10 then -- precision > month
return "jusqu'au " .. totext(endpoint, lang)
else
return "jusqu'à " .. totext(endpoint, lang)
end
end
return value()
end
function p.wikibasedaterange(timedata, lang, case)
local startpoint, endpoint, timepoint = timedata.startpoint, timedata.endpoint, timedata.timepoint
if startpoint and endpoint then
return fromuntil(startpoint, endpoint, lang)
end
if startpoint then
return from(startpoint, lang)
end
if endpoint then
return upto(endpoint, lang)
end
if timepoint then
return datemodule.Wikibasedate(timepoint, lang)
end
end
function p.compactdaterange(timedata, lang) -- YXXX-YXXX format
local startyear, endyear = '', ''
if timedata.startpoint then
startyear = string.sub(timedata.startpoint.time, 9, 12)
end
if timedata.endpoint then
endyear = string.sub(timedata.endpoint.time, 9, 12)
end
-- remove leading zeros
while string.sub(startyear, 1,1) == '0' do
startyear = string.sub(startyear, 2)
end
while string.sub(endyear, 1,1) == '0' do
endyear = string.sub(endyear, 2)
end
return startyear .. '-' .. endyear
end
return p