Aller au contenu

Module:Date complexe

Cette page fait l’objet d’une mesure de semi-protection étendue.
Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 27 septembre 2014 à 18:14 et modifiée en dernier par Zolo (discuter | contributions) (Nouvelle page : -- Translates and format date range sand other non punctual dates --inspired by Commons:Module:Other dates local datemodule = require('Module:Date') local p = {} --[[ wikibase...). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

 Documentation[voir] [modifier] [historique] [purger]

Fonctions permettant de mettre en forme des dates non gérées par Module:Date, en particulier celles concernant une plage de temps plutôt qu'une date ponctuelle.

Pour un meilleur rendu, il est souvent préférable de passer comme argument plutôt que des chaînes des tables sous la forme
{year = number, month = number, day = number, precision = string or number, calendar = string}

Fonctions

  • p.simplestring(dateobject, displayformat) prend un objet date et le transforme en chaîne en fonction des paramètres passée en deuxième paramètre.
  • p.between(startpoint, endpoint, displayformat). Retourne "entre startpoint et endpoint". Si startpoint est absent, retourn "avant endpoint". Si endpoint est absent, retourne "après startpoint".
  • p.daterange(startpoint, endpoint, displayformat). Retourne "de startpoint à endpoint". Si startpoint est absent, retourn "jusqu'à endpoint". Si endpoint est absent, retourne "à partir de startpoint".
  • p.splitDate(str) transforme une chaîne en objet date.
  • p.duration(startpoint, endpoint). Retourne la durée en jours, mois années entre startpoint et endpoint
  • p.before(a, b). Retourne true si b est avant a.
  • p.equal(a, b, precision) retourne true si a et b sont identiques jusqu'à un certain niveau de précision ("day", "month" ou "year")

Exemples

-- 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