<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikinabia.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate_complexe</id>
	<title>Module:Date complexe - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wikinabia.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate_complexe"/>
	<link rel="alternate" type="text/html" href="https://wikinabia.com/index.php?title=Module:Date_complexe&amp;action=history"/>
	<updated>2026-06-17T19:29:34Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.33.1</generator>
	<entry>
		<id>https://wikinabia.com/index.php?title=Module:Date_complexe&amp;diff=5384&amp;oldid=prev</id>
		<title>Docteurmarty : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://wikinabia.com/index.php?title=Module:Date_complexe&amp;diff=5384&amp;oldid=prev"/>
		<updated>2019-10-08T05:41:33Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version du 8 octobre 2019 à 05:41&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Docteurmarty</name></author>
		
	</entry>
	<entry>
		<id>https://wikinabia.com/index.php?title=Module:Date_complexe&amp;diff=5383&amp;oldid=prev</id>
		<title>fr&gt;Adelsheim : La fonction fromToNow() ne se déclenchait plus (ce qui rendait impossible l'affichage de &quot;depuis&quot; plutôt que &quot;à partir de&quot; pour les événements en cours). C'est corrigé.</title>
		<link rel="alternate" type="text/html" href="https://wikinabia.com/index.php?title=Module:Date_complexe&amp;diff=5383&amp;oldid=prev"/>
		<updated>2018-11-20T12:37:36Z</updated>

		<summary type="html">&lt;p&gt;La fonction fromToNow() ne se déclenchait plus (ce qui rendait impossible l&amp;#039;affichage de &amp;quot;depuis&amp;quot; plutôt que &amp;quot;à partir de&amp;quot; pour les événements en cours). C&amp;#039;est corrigé.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- TODO: améliorer les synergies avec Module:Date (gestion par module:Date de dates sans lien et de &amp;quot;XIe siècle en astronautique&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local datemodule = require 'Module:Date'&lt;br /&gt;
local linguistic -- = require 'Module:Linguistique' -- chargé uniquement si nécessaire&lt;br /&gt;
local roman -- = require 'Module:Romain' -- chargé uniquement si nécessaire&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local numericprecision = { -- convertir les précisions en valeurs numériques = à celles utilisées par Wikidata&lt;br /&gt;
	gigayear = 0,&lt;br /&gt;
	megayear = 3,&lt;br /&gt;
	millenium = 6,&lt;br /&gt;
	century = 7,&lt;br /&gt;
	decade = 8,&lt;br /&gt;
	year = 9,&lt;br /&gt;
	month = 10,&lt;br /&gt;
	day = 11,&lt;br /&gt;
	hour = 12,&lt;br /&gt;
	minute = 13,&lt;br /&gt;
	second = 14,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function vowelfirst(str)&lt;br /&gt;
	linguistic = require 'Module:Linguistique'&lt;br /&gt;
	return linguistic.vowelfirst(str)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function setprecision(obj, maxprecision)&lt;br /&gt;
	local precision&lt;br /&gt;
	if type(obj) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		precision = tonumber(obj)&lt;br /&gt;
	elseif type(obj) == &amp;quot;number&amp;quot; then&lt;br /&gt;
		precision = obj&lt;br /&gt;
	elseif type(obj) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		precision = tonumber(obj.precision) or numericprecision[obj.precision]&lt;br /&gt;
	end&lt;br /&gt;
	if not precision then&lt;br /&gt;
		precision = 0&lt;br /&gt;
	end&lt;br /&gt;
	-- maxprecision, surtout pour données Wikidata quand on veut afficher avec moins de précision que l'input (par exemple afficher seulement l'année)&lt;br /&gt;
	if maxprecision then&lt;br /&gt;
		maxprecision = tonumber(maxprecision) or numericprecision[maxprecision]&lt;br /&gt;
	end&lt;br /&gt;
	if maxprecision then&lt;br /&gt;
		return math.min(precision, maxprecision)&lt;br /&gt;
	end&lt;br /&gt;
	return precision&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bigDate(year, precision) -- TODO : gestion de la précision&lt;br /&gt;
	local format = require &amp;quot;Module:Format&amp;quot;&lt;br /&gt;
	local val, unit = 0, &amp;quot;&amp;quot;&lt;br /&gt;
	if year &amp;gt; 999999999 then&lt;br /&gt;
		unit = &amp;quot; [[giga|G]][[Année julienne|a]]&amp;quot;&lt;br /&gt;
		val = year / 1000000000&lt;br /&gt;
	elseif year &amp;gt; 999999 then&lt;br /&gt;
		unit = &amp;quot; [[méga|M]][[Année julienne|a]]&amp;quot;&lt;br /&gt;
		val = year / 1000000&lt;br /&gt;
	end&lt;br /&gt;
	val = format.do_formatnum({val})&lt;br /&gt;
	return val .. unit&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function milleniumString(millenium, era, hideera)&lt;br /&gt;
	roman =  roman or require 'Module:Romain'&lt;br /&gt;
	local str = roman.toRoman(millenium) .. '&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; millénaire'&lt;br /&gt;
	if era == '-' and (not hideera) then&lt;br /&gt;
		str = str .. ' av. J.-C.'&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function centuryString(century, era, hideera)&lt;br /&gt;
	roman =  roman or require 'Module:Romain'&lt;br /&gt;
	local str = roman.toRoman(century) .. '&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; siècle'&lt;br /&gt;
	if era == '-' and (not hideera) then&lt;br /&gt;
		str = str .. ' av. J.-C.'&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function decadeString(decade, era, hideera)&lt;br /&gt;
	local str = 'années ' .. decade .. '0'&lt;br /&gt;
	if era == '-' and (not hideera) then&lt;br /&gt;
		str = str .. ' av. J.-C.'&lt;br /&gt;
	end&lt;br /&gt;
	return '[[' .. str .. ']]'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.simplestring(dateobject, displayformat)&lt;br /&gt;
&lt;br /&gt;
	-- transforme un object date ponctuel en texte&lt;br /&gt;
	-- les dates de type ISO devraient passer par Module:Date, mais il faut pouvoir désactiver les liens&lt;br /&gt;
	if type(dateobject) == 'string' or type(dateobject) == 'nil' then&lt;br /&gt;
		return dateobject&lt;br /&gt;
	end&lt;br /&gt;
	if (not dateobject.year) and (not dateobject.month) and dateobject.day then -- si seul le jour est passé, par exemple à cause de removeclutter, le format n'est pas pris en charge par module:Date&lt;br /&gt;
		if displayformat.precision and numericprecision[displayformat.precision] &amp;lt; 11 then&lt;br /&gt;
			return ''&lt;br /&gt;
		else&lt;br /&gt;
			return tostring(dateobject.day)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local era = dateobject.era&lt;br /&gt;
&lt;br /&gt;
	if not displayformat then&lt;br /&gt;
		displayformat = {}&lt;br /&gt;
	end&lt;br /&gt;
	local linktopic = displayformat.linktopic&lt;br /&gt;
	local nolinks&lt;br /&gt;
	if linktopic == '-' then&lt;br /&gt;
		nolinks = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local str&lt;br /&gt;
	local precision = setprecision(dateobject, displayformat.precision)&lt;br /&gt;
	&lt;br /&gt;
	-- formats gérés par ce module&lt;br /&gt;
	local year = tonumber( dateobject.year) or 0&lt;br /&gt;
	&lt;br /&gt;
	if year &amp;gt; 999999 then -- grosses dates pour l'astronomie, la paléontologie&lt;br /&gt;
		return bigDate(year, precision)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local hideera = displayformat.hideera&lt;br /&gt;
	&lt;br /&gt;
	if precision == 6 then&lt;br /&gt;
		local millenium = math.floor((year - 1)/1000) + 1&lt;br /&gt;
		str = milleniumString(millenium, era, hideera)&lt;br /&gt;
	elseif precision == 7 then&lt;br /&gt;
		local century = math.floor((year - 1)/100) + 1&lt;br /&gt;
		str = centuryString(century, era, hideera)&lt;br /&gt;
	elseif precision == 8 then&lt;br /&gt;
		local decade = tostring(math.floor(year/10))&lt;br /&gt;
		str = decadeString(decade, era, hideera)&lt;br /&gt;
	end&lt;br /&gt;
	if str then&lt;br /&gt;
		return str&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- formats gérés par Module:Date&lt;br /&gt;
	local year = dateobject.year&lt;br /&gt;
	if year and (era == '-') then&lt;br /&gt;
		year = 0 - year&lt;br /&gt;
	end&lt;br /&gt;
	local month, day&lt;br /&gt;
	&lt;br /&gt;
	if precision &amp;gt; 9 then&lt;br /&gt;
		month = dateobject.month&lt;br /&gt;
		if precision &amp;gt; 10 then&lt;br /&gt;
			day = dateobject.day&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local avJC -- équivalent de hideera pour modeleDate&lt;br /&gt;
	if displayformat.hideera then&lt;br /&gt;
		avJC = 'non'&lt;br /&gt;
	end&lt;br /&gt;
	str = datemodule.modeleDate{jour = day, mois = month, annee = year, qualificatif = linktopic, nolinks = nolinks, avJC = avJC}&lt;br /&gt;
	return str or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromToNow(d, datestr, precision) -- retourne &amp;quot;depuis&amp;quot; plutôt que &amp;quot;à partir de&amp;quot; quand c'est pas terminé&lt;br /&gt;
	if (precision &amp;gt;= 11) or (precision == 7) or (precision == 6)  then -- ont dit &amp;quot;à partir du pour les dates avec jour, les siècles, les millénaires&lt;br /&gt;
		if vowelfirst(datestr) then -- suppose l'absence de lien interne&lt;br /&gt;
			return &amp;quot;depuis l'&amp;quot; .. datestr&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;depuis le &amp;quot; .. datestr&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;depuis &amp;quot; .. datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromdate(d, displayformat)  -- retourne &amp;quot;à partir de date&amp;quot; en langage naturel&lt;br /&gt;
	displayformat = displayformat or {}&lt;br /&gt;
	local precision = setprecision(d, displayformat.precision)&lt;br /&gt;
	local datestr = p.simplestring(d, displayformat)&lt;br /&gt;
	if displayformat and displayformat.textformat == 'minimum' then&lt;br /&gt;
		return datestr -- par exemple pour les classements MH, juste afficher la date de début&lt;br /&gt;
	end&lt;br /&gt;
	if displayformat and displayformat.textformat == 'short' then&lt;br /&gt;
		return datestr .. '&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;' -- pour certaines infobox (footballeur par exemple), afficher date de début et un tiret&lt;br /&gt;
	end&lt;br /&gt;
	if p.before ( os.date(&amp;quot;!%Y-%m-%dT%TZ&amp;quot;), d) then return&lt;br /&gt;
		fromToNow(d, datestr, precision)&lt;br /&gt;
	end&lt;br /&gt;
	if (precision &amp;gt;= 11) or (precision == 7) or (precision == 6)  then -- ont dit &amp;quot;à partir du pour les dates avec jour, les siècles, les millénaires&lt;br /&gt;
		return 'à partir du ' .. datestr&lt;br /&gt;
	end&lt;br /&gt;
	if (precision == 10) and (vowelfirst(datemodule.determinationMois(d.month))) then&lt;br /&gt;
		return &amp;quot;à partir d'&amp;quot; .. datestr&lt;br /&gt;
	end&lt;br /&gt;
	return 'à partir de ' .. datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function upto(d, displayformat)  -- retourne &amp;quot;jusqu'à date' en langage naturel&lt;br /&gt;
	displayformat = displayformat or {}&lt;br /&gt;
	local datestring = p.simplestring(d, displayformat)&lt;br /&gt;
	local precision = setprecision(d, displayformat.precision)&lt;br /&gt;
	if displayformat and displayformat.textformat == 'infobox' then&lt;br /&gt;
		return '&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;'.. datestring-- pour certaines infobox (footballeur par exemple), afficher date de début et un tiret&lt;br /&gt;
	end&lt;br /&gt;
	if displayformat and displayformat.textformat == 'short' then&lt;br /&gt;
		return'&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;' .. datestring -- pour certaines infobox (footballeur par exemple), afficher date de début et un tiret&lt;br /&gt;
	end&lt;br /&gt;
	if (precision &amp;gt;= 11) or (precision == 7) or (precision == 6) then --on dit &amp;quot;jusqu'au&amp;quot; pour les dates avec jour, et pour les siècles&lt;br /&gt;
		return &amp;quot;jusqu'au &amp;quot; .. datestring&lt;br /&gt;
	elseif (precision &amp;gt; 9) then&lt;br /&gt;
		return &amp;quot;jusqu'à &amp;quot; .. datestring&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;jusqu'en &amp;quot; .. datestring&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromuntillong(startstr, endstr, era, precision)&lt;br /&gt;
	-- on dit &amp;quot;du 3 au 14 janvier&amp;quot; mais &amp;quot;de septembe à octobre&lt;br /&gt;
	if precision &amp;gt;= 11 then -- &amp;gt;= day&lt;br /&gt;
		return &amp;quot;du &amp;quot; .. startstr .. &amp;quot; au &amp;quot; ..  endstr .. era&lt;br /&gt;
	else&lt;br /&gt;
		if vowelfirst(startstr) then&lt;br /&gt;
			return &amp;quot;d'&amp;quot; .. startstr .. &amp;quot; à &amp;quot;.. endstr .. era&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;de &amp;quot; .. startstr .. &amp;quot; à &amp;quot; .. endstr .. era&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeclutter(startpoint, endpoint, precision, displayformat) -- prépare à rendre la date plus jolie : &amp;quot;juin 445 av-JC-juillet 445 av-JC -&amp;gt; juin-juillet 445-av-JC&amp;quot;&lt;br /&gt;
	if (type(startpoint) ~= 'table') or (type(endpoint) ~= 'table') then&lt;br /&gt;
		return startpoint, endpoint, precision, displayformat&lt;br /&gt;
	end&lt;br /&gt;
	local era = endpoint.era&lt;br /&gt;
	local sameera&lt;br /&gt;
	if startpoint.era == endpoint.era then&lt;br /&gt;
		sameera = true&lt;br /&gt;
	end&lt;br /&gt;
	if sameera and (endpoint.year == startpoint.year) then&lt;br /&gt;
		startpoint.year = nil&lt;br /&gt;
		if (startpoint.month == endpoint.month) then&lt;br /&gt;
			startpoint.month = nil&lt;br /&gt;
			if (startpoint.day == endpoint.day) then&lt;br /&gt;
				startpoint.day = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return startpoint, endpoint, era, displayformat, sameera&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.between(startpoint, endpoint, displayformat)&lt;br /&gt;
	displayformat = displayformat or {}&lt;br /&gt;
	local precision = setprecision(endpoint, displayformat.precision) or 9&lt;br /&gt;
&lt;br /&gt;
	local startpoint = p.simplestring(startpoint, displayformat)&lt;br /&gt;
	local endpoint = p.simplestring(endpoint, displayformat)&lt;br /&gt;
	&lt;br /&gt;
	if not (startpoint or endpoint) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not endpoint then&lt;br /&gt;
		if precision &amp;lt;= 10 then&lt;br /&gt;
			return &amp;quot;après &amp;quot; ..  startpoint&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;après le &amp;quot; ..  startpoint&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not startpoint then&lt;br /&gt;
		if precision &amp;lt;= 10 then&lt;br /&gt;
			return &amp;quot;avant &amp;quot; ..  endpoint&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;avant le &amp;quot; ..  endpoint&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
 	-- analyse les paramètres pour éviter les redondances&lt;br /&gt;
 	&lt;br /&gt;
	local startpoint, endpoint, era, displayformat, sameera = removeclutter(startpoint, endpoint, precision, displayformat)&lt;br /&gt;
&lt;br /&gt;
	local startstr, endstr =  p.simplestring(startpoint, displayformat), p.simplestring(endpoint, displayformat)&lt;br /&gt;
	displayformat.hideera = true&lt;br /&gt;
	&lt;br /&gt;
	if (startstr == '') or (startstr == endstr) then&lt;br /&gt;
		if (not sameera) then&lt;br /&gt;
			displayformat.hideera = false --sinon c'est incompréhensible&lt;br /&gt;
			return p.simplestring(endpoint, displayformat)&lt;br /&gt;
		end&lt;br /&gt;
		return endstr&lt;br /&gt;
	end&lt;br /&gt;
	-- pour éviter les tournures répétitives comme  &amp;quot;du 13 septembre 2006 au 18 september 2006&amp;quot;&lt;br /&gt;
	if era == &amp;quot;-&amp;quot; then&lt;br /&gt;
		era = &amp;quot; av J-C&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		era = &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if precision &amp;lt;= 10 then&lt;br /&gt;
		return &amp;quot;entre &amp;quot; .. startstr .. &amp;quot; et &amp;quot; .. endstr .. &amp;quot; &amp;quot; .. era&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;entre le &amp;quot; .. startstr .. &amp;quot; et le &amp;quot; .. endstr .. &amp;quot; &amp;quot; .. era&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromuntil(startpoint, endpoint, displayformat)&lt;br /&gt;
	displayformat = displayformat or {}&lt;br /&gt;
	local precision = setprecision(endpoint, displayformat.precision)&lt;br /&gt;
&lt;br /&gt;
 	-- analyse les paramètres pour éviter les redondances&lt;br /&gt;
 	&lt;br /&gt;
	local startpoint, endpoint, era, displayformat, sameera = removeclutter(startpoint, endpoint, precision, displayformat)&lt;br /&gt;
&lt;br /&gt;
	local hideera= displayformat.hideera	&lt;br /&gt;
	displayformat.hideera = true -- pour les chaînes intermédiaires&lt;br /&gt;
	&lt;br /&gt;
	local startstr, endstr =  p.simplestring(startpoint, displayformat), p.simplestring(endpoint, displayformat)&lt;br /&gt;
	&lt;br /&gt;
	if (startstr == '') or (startstr == endstr) then&lt;br /&gt;
		displayformat.hideera = hideera -- on va faire une chaîne simple, on reprend donc le format initialement demandé&lt;br /&gt;
		if (not sameera) then&lt;br /&gt;
			displayformat.hideera = false --sinon c'est incompréhensible&lt;br /&gt;
		end&lt;br /&gt;
		return p.simplestring(endpoint, displayformat)&lt;br /&gt;
	end&lt;br /&gt;
	-- pour éviter les tournures répétitives comme  &amp;quot;du 13 septembre 2006 au 18 september 2006&amp;quot;&lt;br /&gt;
	if era == '-' then&lt;br /&gt;
		era = ' av J-C'&lt;br /&gt;
	else&lt;br /&gt;
		era = ''&lt;br /&gt;
	end&lt;br /&gt;
	if displayformat.textformat == 'long' then&lt;br /&gt;
		return fromuntillong(startstr, endstr, era, precision)&lt;br /&gt;
	elseif (type(precision) == &amp;quot;number&amp;quot;) and (precision &amp;gt; 9) then -- si les date contiennent des mois ou jours, il vaut mieux un espace&lt;br /&gt;
		return startstr .. ' -&amp;lt;wbr&amp;gt; ' .. endstr .. era&lt;br /&gt;
	else&lt;br /&gt;
		return startstr .. '-&amp;lt;wbr&amp;gt;' .. endstr .. era&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.fuzzydate(dateobject, displayformat)&lt;br /&gt;
	local str = p.simplestring(dateobject, displayformat)&lt;br /&gt;
	if not str then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;vers &amp;quot; .. str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.daterange(startpoint, endpoint, displayformat)&lt;br /&gt;
	if startpoint and endpoint then&lt;br /&gt;
		return fromuntil(startpoint, endpoint, displayformat)&lt;br /&gt;
	elseif startpoint then&lt;br /&gt;
		return fromdate(startpoint, displayformat)&lt;br /&gt;
	elseif endpoint then&lt;br /&gt;
		return upto(endpoint, displayformat)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.duration(start, ending)&lt;br /&gt;
	if (not start) or (not ending) then&lt;br /&gt;
		return nil -- ?&lt;br /&gt;
	end&lt;br /&gt;
	return datemodule.age(start.year, start.month, start.day, ending.year, ending.month, ending.day)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function splitWDdate(str) -- depuis datavalue.value.time de Wikidata, fonctionnerait aussi en utilisant simplement splitISO&lt;br /&gt;
	local pattern = &amp;quot;(%W)(%d+)%-(%d+)%-(%d+)&amp;quot;&lt;br /&gt;
	local era, year, month, day = str:match(pattern)&lt;br /&gt;
	return era, year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function splitISO(str)&lt;br /&gt;
	local era, year, month, day&lt;br /&gt;
	era = string.sub(str, 1, 1)&lt;br /&gt;
	if tonumber(era) then&lt;br /&gt;
		era = '+'&lt;br /&gt;
	end&lt;br /&gt;
	local f = string.gmatch(str, '%d+')&lt;br /&gt;
	year, month, day = f(), f(), f()&lt;br /&gt;
	return era, year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.splitDate(orig, calendar)&lt;br /&gt;
	if not orig then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if type(orig) == 'table' then&lt;br /&gt;
		return orig&lt;br /&gt;
	end&lt;br /&gt;
	if type(orig) ~= 'string' then&lt;br /&gt;
		return error(&amp;quot;bad datatype for date, string expected, got &amp;quot; .. type(orig))&lt;br /&gt;
	end&lt;br /&gt;
	local era, y, m, d = splitWDdate(orig) &lt;br /&gt;
	if not era then&lt;br /&gt;
		era, y, m, d = splitISO(orig)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	y, m, d = tonumber(y or 1), tonumber(m or 1), tonumber(d or 1)&lt;br /&gt;
	return {day = d, month = m, year = y, era = era, type = 'dateobject', calendar = calendar}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.before(a, b) -- return true if b is before a or if at least one of a or b is missing&lt;br /&gt;
	a = p.splitDate(a) &lt;br /&gt;
	b = p.splitDate(b)&lt;br /&gt;
	if (not a) or (not b) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	local order = {'era', 'year', 'month', 'day'}&lt;br /&gt;
	for i, j in pairs(order) do&lt;br /&gt;
		if b[j] &amp;lt; a[j] then&lt;br /&gt;
			return true&lt;br /&gt;
		elseif b[j] &amp;gt; a[j] then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>fr&gt;Adelsheim</name></author>
		
	</entry>
</feed>