<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://dansunegalaxie.ca/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://dansunegalaxie.ca/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate_complexe"/>
	<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Date_complexe&amp;action=history"/>
	<updated>2026-04-05T03:33:23Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://dansunegalaxie.ca/index.php?title=Module:Date_complexe&amp;diff=189&amp;oldid=prev</id>
		<title>Yuki : 1 version importée : Infobox</title>
		<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Date_complexe&amp;diff=189&amp;oldid=prev"/>
		<updated>2023-11-15T07:11:15Z</updated>

		<summary type="html">&lt;p&gt;1 version importée : Infobox&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 15 novembre 2023 à 03:11&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key dugwiki:diff::1.12:old-188:rev-189 --&gt;
&lt;/table&gt;</summary>
		<author><name>Yuki</name></author>
	</entry>
	<entry>
		<id>https://dansunegalaxie.ca/index.php?title=Module:Date_complexe&amp;diff=188&amp;oldid=prev</id>
		<title>wikipedia&gt;GrandEscogriffe : &quot;av. J.-C.&quot; : + balise d&#039;abréviation et infobulle</title>
		<link rel="alternate" type="text/html" href="https://dansunegalaxie.ca/index.php?title=Module:Date_complexe&amp;diff=188&amp;oldid=prev"/>
		<updated>2023-10-17T16:40:52Z</updated>

		<summary type="html">&lt;p&gt;&amp;quot;av. J.-C.&amp;quot; : + balise d&amp;#039;abréviation et infobulle&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 &amp;#039;Module:Date&amp;#039;&lt;br /&gt;
local linguistic -- = require &amp;#039;Module:Linguistique&amp;#039; -- chargé uniquement si nécessaire&lt;br /&gt;
local roman -- = require &amp;#039;Module:Romain&amp;#039; -- 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 avJC = &amp;#039;&amp;lt;abbr class=&amp;quot;abbr nowrap&amp;quot; title=&amp;quot;avant Jésus-Christ&amp;quot;&amp;gt; av. J.-C.&amp;lt;/abbr&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local function vowelfirst(str)&lt;br /&gt;
	linguistic = require &amp;#039;Module:Linguistique&amp;#039;&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&amp;#039;input (par exemple afficher seulement l&amp;#039;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 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 = mw.getContentLanguage():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 &amp;#039;Module:Romain&amp;#039;&lt;br /&gt;
	local str = roman.toRoman(millenium) .. &amp;#039;&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; millénaire&amp;#039;&lt;br /&gt;
	if era == &amp;#039;-&amp;#039; and (not hideera) then&lt;br /&gt;
		str = str .. avJC&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 &amp;#039;Module:Romain&amp;#039;&lt;br /&gt;
	local str = roman.toRoman(century) .. &amp;#039;&amp;lt;sup&amp;gt;e&amp;lt;/sup&amp;gt; siècle&amp;#039;&lt;br /&gt;
	if era == &amp;#039;-&amp;#039; and (not hideera) then&lt;br /&gt;
		str = str .. avJC&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 = &amp;#039;années &amp;#039; .. decade .. &amp;#039;0&amp;#039;&lt;br /&gt;
	if era == &amp;#039;-&amp;#039; and (not hideera) then&lt;br /&gt;
		str = str .. avJC&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;[[&amp;#039; .. str .. &amp;#039;]]&amp;#039;&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) == &amp;#039;string&amp;#039; or type(dateobject) == &amp;#039;nil&amp;#039; 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&amp;#039;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 &amp;#039;&amp;#039;&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 == &amp;#039;-&amp;#039; 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&amp;#039;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 == &amp;#039;-&amp;#039;) 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 = &amp;#039;non&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	str = datemodule.modeleDate{jour = day, mois = month, annee = year, qualificatif = linktopic, nolinks = nolinks, avJC = avJC, liens = true}&lt;br /&gt;
	return str or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromToNow(datestr, precision) -- retourne &amp;quot;depuis&amp;quot; plutôt que &amp;quot;à partir de&amp;quot; quand c&amp;#039;est pas terminé&lt;br /&gt;
	if (precision &amp;gt;= 11) or (precision == 7) or (precision == 6)  then -- ont dit &amp;quot;depuis le&amp;quot; pour les dates avec jour, les siècles, les millénaires&lt;br /&gt;
		if vowelfirst(datestr) then -- suppose l&amp;#039;absence de lien interne&lt;br /&gt;
			return &amp;quot;depuis l&amp;#039;&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;
	if (precision == 8) then -- ont dit &amp;quot;depuis les&amp;quot; pour les décennies (&amp;quot;années ...&amp;quot;)&lt;br /&gt;
		return &amp;quot;depuis les &amp;quot; .. datestr&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 == &amp;#039;minimum&amp;#039; 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 == &amp;#039;short&amp;#039; then&lt;br /&gt;
		return datestr .. &amp;#039;&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;&amp;#039; -- 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) and (displayformat.stilltrue ~= &amp;quot;?&amp;quot;) and (displayformat.stilltrue ~= false) then&lt;br /&gt;
		return fromToNow(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&amp;quot; pour les dates avec jour, les siècles, les millénaires&lt;br /&gt;
		return &amp;#039;à partir du &amp;#039; .. 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;#039;&amp;quot; .. datestr&lt;br /&gt;
	end&lt;br /&gt;
	if (precision == 8)  then -- ont dit &amp;quot;à partir des&amp;quot; pour les décennies&lt;br /&gt;
		return &amp;#039;à partir des &amp;#039; .. datestr&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;à partir de &amp;#039; .. datestr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function upto(d, displayformat)  -- retourne &amp;quot;jusqu&amp;#039;à date&amp;#039; 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 == &amp;#039;infobox&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;&amp;#039;.. 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 == &amp;#039;short&amp;#039; then&lt;br /&gt;
		return&amp;#039;&amp;amp;nbsp;&amp;amp;ndash;&amp;amp;nbsp;&amp;#039; .. 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&amp;#039;au&amp;quot; pour les dates avec jour, et pour les siècles&lt;br /&gt;
		return &amp;quot;jusqu&amp;#039;au &amp;quot; .. datestring&lt;br /&gt;
	elseif (precision &amp;gt; 9) then&lt;br /&gt;
		return &amp;quot;jusqu&amp;#039;à &amp;quot; .. datestring&lt;br /&gt;
	elseif (precision == 8) then&lt;br /&gt;
		return &amp;quot;jusqu&amp;#039;aux &amp;quot; .. datestring&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;jusqu&amp;#039;en &amp;quot; .. datestring&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fromuntillong(startstr, endstr, era, startprecision, endprecision)&lt;br /&gt;
	-- on dit &amp;quot;du 3 au 14 janvier&amp;quot; mais &amp;quot;de septembe à octobre&lt;br /&gt;
	local longstartstr&lt;br /&gt;
	if startprecision &amp;gt;= 11 then -- &amp;gt;= day&lt;br /&gt;
		longstartstr = &amp;quot;du &amp;quot; .. startstr&lt;br /&gt;
	elseif startprecision == 8 then -- == décennie (&amp;quot;années&amp;quot;)&lt;br /&gt;
		longstartstr = &amp;quot;des &amp;quot; .. startstr&lt;br /&gt;
	else&lt;br /&gt;
		if vowelfirst(startstr) then&lt;br /&gt;
			longstartstr = &amp;quot;d&amp;#039;&amp;quot; .. startstr&lt;br /&gt;
		else&lt;br /&gt;
			longstartstr = &amp;quot;de &amp;quot; .. startstr&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local longendstr&lt;br /&gt;
	if endprecision &amp;gt;= 11 then -- &amp;gt;= day&lt;br /&gt;
		longendstr = &amp;quot; au &amp;quot; ..  endstr .. era&lt;br /&gt;
	elseif endprecision == 8 then -- == décennie (&amp;quot;années&amp;quot;)&lt;br /&gt;
		longendstr = &amp;quot; aux &amp;quot; ..  endstr .. era&lt;br /&gt;
	else&lt;br /&gt;
		longendstr = &amp;quot; à &amp;quot; ..  endstr .. era&lt;br /&gt;
	end&lt;br /&gt;
	return longstartstr .. longendstr&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) ~= &amp;#039;table&amp;#039;) or (type(endpoint) ~= &amp;#039;table&amp;#039;) 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 = false&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 == &amp;#039;&amp;#039;) or (startstr == endstr) then&lt;br /&gt;
		if (not sameera) then&lt;br /&gt;
			displayformat.hideera = false --sinon c&amp;#039;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 septembre 2006&amp;quot;&lt;br /&gt;
	if era == &amp;quot;-&amp;quot; then&lt;br /&gt;
		era = avJC&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 .. era&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;entre le &amp;quot; .. startstr .. &amp;quot; et le &amp;quot; .. endstr .. 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 startprecision = setprecision(startpoint, displayformat.precision)&lt;br /&gt;
	local endprecision = 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, endprecision, 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 == &amp;#039;&amp;#039;) 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&amp;#039;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 septembre 2006&amp;quot;&lt;br /&gt;
	local hasStartera = false&lt;br /&gt;
	if era == &amp;#039;-&amp;#039; then&lt;br /&gt;
		era = avJC&lt;br /&gt;
	else&lt;br /&gt;
		era = &amp;#039;&amp;#039;&lt;br /&gt;
		if not (sameera == nil) and not sameera then&lt;br /&gt;
			startstr = startstr .. avJC&lt;br /&gt;
			hasStartera  = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if displayformat.textformat == &amp;#039;long&amp;#039; then&lt;br /&gt;
		return fromuntillong(startstr, endstr, era, startprecision, endprecision)&lt;br /&gt;
	elseif (type(startprecision) == &amp;quot;number&amp;quot;) and (startprecision &amp;gt; 9) or (type(endprecision) == &amp;quot;number&amp;quot;) and (endprecision &amp;gt; 9) or hasStartera  then -- si les date contiennent des mois ou jours, ou si il y a un era avant, il vaut mieux un espace&lt;br /&gt;
		return startstr .. &amp;#039; -&amp;lt;wbr&amp;gt; &amp;#039; .. endstr .. era&lt;br /&gt;
	else&lt;br /&gt;
		return startstr .. &amp;#039;-&amp;lt;wbr&amp;gt;&amp;#039; .. endstr .. era&lt;br /&gt;
	end&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;
	str = mw.text.trim(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 = &amp;#039;+&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local f = string.gmatch(str, &amp;#039;%d+&amp;#039;)&lt;br /&gt;
	year, month, day = f(), f(), f()&lt;br /&gt;
	return era, year, month, day&lt;br /&gt;
&lt;br /&gt;
end&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) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		return orig&lt;br /&gt;
	end&lt;br /&gt;
	if type(orig) ~= &amp;#039;string&amp;#039; 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 = &amp;#039;dateobject&amp;#039;, 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 = {&amp;#039;year&amp;#039;, &amp;#039;month&amp;#039;, &amp;#039;day&amp;#039;}&lt;br /&gt;
	if a[&amp;#039;era&amp;#039;] == &amp;#039;+&amp;#039; then&lt;br /&gt;
		if b[&amp;#039;era&amp;#039;] == &amp;#039;+&amp;#039; then&lt;br /&gt;
			for i, j in ipairs(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;
		else -- b -&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	else -- a -&lt;br /&gt;
		if b[&amp;#039;era&amp;#039;] == &amp;#039;+&amp;#039; then&lt;br /&gt;
			return false&lt;br /&gt;
		else -- b -&lt;br /&gt;
			for i, j in ipairs(order) do&lt;br /&gt;
				if b[j] &amp;gt; a[j] then&lt;br /&gt;
					return true&lt;br /&gt;
				elseif b[j] &amp;lt; a[j] then&lt;br /&gt;
					return false&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equal(a, b, precision)&lt;br /&gt;
	a = p.splitDate(a) &lt;br /&gt;
	b = p.splitDate(b)&lt;br /&gt;
&lt;br /&gt;
	if type(precision) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		precision = tonumber(precision) or numericprecision[mw.text.trim( precision)]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not precision then&lt;br /&gt;
		precision = 11 -- day by default ?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (not a) or (not b) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if a.era and b.era and (b.era  ~= a.era) then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
	if (precision &amp;gt;= 11) then&lt;br /&gt;
		if a.day and b.day and (b.day ~= a.day) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (precision &amp;gt;= 10) then&lt;br /&gt;
		if a.month and b.month and (b.month ~= a.month) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (precision &amp;gt;= 9) then&lt;br /&gt;
		if a.year and b.year and (b.year ~= a.year) then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wikipedia&gt;GrandEscogriffe</name></author>
	</entry>
</feed>