<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://baripedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate</id>
	<title>Module:Date - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://baripedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate"/>
	<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;action=history"/>
	<updated>2026-04-11T14:34:53Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.38.6</generator>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=30850&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=30850&amp;oldid=prev"/>
		<updated>2016-01-27T20:13:59Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;a href=&quot;https://baripedia.org/index.php?title=Module:Date&amp;amp;diff=30850&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=28275&amp;oldid=prev</id>
		<title>Arthur : 1 révision importée</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=28275&amp;oldid=prev"/>
		<updated>2015-11-09T20:49:14Z</updated>

		<summary type="html">&lt;p&gt;1 révision importée&lt;/p&gt;
&lt;a href=&quot;https://baripedia.org/index.php?title=Module:Date&amp;amp;diff=28275&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=12736&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=12736&amp;oldid=prev"/>
		<updated>2014-07-09T12:42:40Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local fun = {}&lt;br /&gt;
&lt;br /&gt;
local TableBuilder = require( 'Module:TableBuilder' )&lt;br /&gt;
local Outils = require( 'Module:Outils' )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- nettoie un paramètre non nommé (vire les espaces au début et à la fin)&lt;br /&gt;
-- retourne  nil si le texte est vide ou n'est pas du texte. Attention c'est important pour les fonction qui l'utilise.&lt;br /&gt;
local trim = Outils.trim&lt;br /&gt;
&lt;br /&gt;
local function ucfirst( str )&lt;br /&gt;
	return mw.ustring.upper( mw.ustring.sub( str, 1, 1 ) ) .. mw.ustring.sub( str, 2 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- liste des mois, écriture exacte et simplifiée, en minuscule&lt;br /&gt;
local liste_mois = {&lt;br /&gt;
	{ &amp;quot;janvier&amp;quot;, &amp;quot;jan.&amp;quot;, &amp;quot;janv.&amp;quot;, &amp;quot;jan&amp;quot;, &amp;quot;janv&amp;quot;, &amp;quot;january&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;février&amp;quot;, &amp;quot;fevrier&amp;quot;, &amp;quot;fev.&amp;quot;, &amp;quot;fev&amp;quot;, &amp;quot;fév.&amp;quot;, &amp;quot;fév&amp;quot;, &amp;quot;february&amp;quot;, nJour = 29 },&lt;br /&gt;
	{ &amp;quot;mars&amp;quot;, &amp;quot;mar.&amp;quot;, &amp;quot;mar&amp;quot;, &amp;quot;march&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;avril&amp;quot;, &amp;quot;avr.&amp;quot;, &amp;quot;avr&amp;quot;, &amp;quot;apr&amp;quot;, &amp;quot;april&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;mai&amp;quot;, &amp;quot;may&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;juin&amp;quot;, &amp;quot;jun&amp;quot;, &amp;quot;june&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;juillet&amp;quot;, &amp;quot;juil.&amp;quot;, &amp;quot;juil&amp;quot;, &amp;quot;juill.&amp;quot;, &amp;quot;juill&amp;quot;, &amp;quot;jul&amp;quot;, &amp;quot;july&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;août&amp;quot;, &amp;quot;aout&amp;quot;, &amp;quot;aou&amp;quot;, &amp;quot;aug&amp;quot;, &amp;quot;august&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;septembre&amp;quot;, &amp;quot;sept.&amp;quot;, &amp;quot;sept&amp;quot;, &amp;quot;sep.&amp;quot;, &amp;quot;sep&amp;quot;, &amp;quot;september&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;octobre&amp;quot;, &amp;quot;oct.&amp;quot;, &amp;quot;oct&amp;quot;, &amp;quot;october&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;novembre&amp;quot;, &amp;quot;nov.&amp;quot;, &amp;quot;nov&amp;quot;, &amp;quot;november&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;décembre&amp;quot;, &amp;quot;decembre&amp;quot;, &amp;quot;déc.&amp;quot;, &amp;quot;dec.&amp;quot;, &amp;quot;dec&amp;quot;, &amp;quot;déc&amp;quot;, &amp;quot;december&amp;quot;, nJour = 31 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- nom du mois à partir du numéro&lt;br /&gt;
function fun.nomDuMois( num )&lt;br /&gt;
	if type( num ) ~= &amp;quot;number&amp;quot; or num &amp;lt; 1 or num &amp;gt; 12 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return liste_mois[num][1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- valide que la chaîne passée est un mois valide.&lt;br /&gt;
-- retourne le nom complet ou nil si non reconnu&lt;br /&gt;
-- si reconnu, retourne aussi le numéro du mois [1-12]&lt;br /&gt;
function fun.valideMois( mois )&lt;br /&gt;
	if type( mois ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local m = mw.ustring.lower( mw.text.trim( mois ) )&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, 12 do&lt;br /&gt;
		local j = 1&lt;br /&gt;
		while liste_mois[i][j] ~= nil do&lt;br /&gt;
			if liste_mois[i][j] == m then&lt;br /&gt;
				return liste_mois[i][1], i&lt;br /&gt;
			end&lt;br /&gt;
			j = j + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- pas trouvé = return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- determinationMois trouve le numéro du mois et son nom,&lt;br /&gt;
-- à partir de son nom, de son numéro ou d'une expression mathématique.&lt;br /&gt;
-- l'objet frame est facultatif, mais permet de tester si mois est une expression type '2+3'&lt;br /&gt;
function fun.determinationMois( mois, frame )&lt;br /&gt;
	local num, nom&lt;br /&gt;
	if tonumber( mois ) then&lt;br /&gt;
		num = math.floor( math.fmod( tonumber( mois ) - 1, 12 )  ) + 1&lt;br /&gt;
	elseif type( mois ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		nom, num = fun.valideMois( mois )&lt;br /&gt;
		if nom == nil and frame and frame.callParserFunction then&lt;br /&gt;
			-- essai de détermination d'un nombre avec le parser #expr de Mediawiki.&lt;br /&gt;
			-- la fonction s'appelle sans l'objet frame pour ne pas tourner en boucle.&lt;br /&gt;
			nom, num = fun.determinationMois( frame:callParserFunction( '#expr', mois ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if num and not nom then&lt;br /&gt;
		nom = liste_mois[num][1]&lt;br /&gt;
	end&lt;br /&gt;
	return nom, num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--  fonction interne à modeleDate, pour déterminer si on peut se passer de faire un ifexit&lt;br /&gt;
local function existDate( dataQualificatif, annee, mois )&lt;br /&gt;
	local data&lt;br /&gt;
	if mois then&lt;br /&gt;
		data = dataQualificatif.mois&lt;br /&gt;
	else&lt;br /&gt;
		data = dataQualificatif.annee&lt;br /&gt;
	end&lt;br /&gt;
	if type( data ) ~= 'table' then&lt;br /&gt;
		-- si data n'existe pas c'est que l'on considère qu'il n'y a pas de lien.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	-- le qualificatif est remplacer par celui de la base de donnée, ce qui permet des alias.&lt;br /&gt;
	local lien = annee .. ' ' .. ( dataQualificatif.qualificatif or '' )&lt;br /&gt;
	local seul = annee&lt;br /&gt;
	if mois then&lt;br /&gt;
		lien = mois .. ' ' .. lien&lt;br /&gt;
		seul = ucfirst( mois ) .. ' ' .. annee&lt;br /&gt;
	end&lt;br /&gt;
	local aucun = tonumber( data.aucun )&lt;br /&gt;
	if aucun and annee &amp;lt;= aucun then&lt;br /&gt;
		-- si la l'année est dans la partie 'aucun' on teste s'il y a malgré tout un lien isolé&lt;br /&gt;
		if type( data.seul ) == 'table' then&lt;br /&gt;
			for i, v in ipairs( data.seul ) do&lt;br /&gt;
				if seul == v or seul == tonumber( v ) then&lt;br /&gt;
					return lien&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- partie aucun et pas de lien =&amp;gt; nil&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type( data.tous ) == 'table' then&lt;br /&gt;
		local tous1, tous2 = tonumber( data.tous[1] ), tonumber( data.tous[2] )&lt;br /&gt;
		if tous1 and tous2 and annee &amp;gt;= tous1 and annee &amp;lt;= tous2 then&lt;br /&gt;
			-- l'année est dans la partie 'tous' donc on retourne le lien&lt;br /&gt;
			return lien&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- l'annee n'est ni dans la partie aucun, ni dans la partie tous donc il faut tester si la page existe.&lt;br /&gt;
	cibleLien = mw.title.new( lien )&lt;br /&gt;
	if cibleLien and cibleLien.exists then&lt;br /&gt;
		return lien&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- émule le modèle {{m|Date}}.&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
--		1 : jour (numéro ou &amp;quot;1er&amp;quot;). optionnel, si absent pas de jour&lt;br /&gt;
--		2 : mois (en toutes lettres)&lt;br /&gt;
--		3 : année (nombre)&lt;br /&gt;
--		4 : optionnel, spécialité de l'année&lt;br /&gt;
--		Comportement spécial (&amp;quot;truc à deux balles au lieu d'utiliser un&lt;br /&gt;
--		paramètre nommé du genre &amp;quot;sans année=oui&amp;quot;...&amp;quot;) : si 1 est vide&lt;br /&gt;
--		mais que le reste est complet → on n'affiche pas l'année&lt;br /&gt;
function fun.modeleDate( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	&lt;br /&gt;
	-- chargement de la base de donnée répertoriant certaines pages existant ou n'existant pas pour éviter les &amp;quot;ifexist&amp;quot;.&lt;br /&gt;
	local dataLiens&lt;br /&gt;
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )&lt;br /&gt;
	if success then&lt;br /&gt;
		dataLiens = resultat&lt;br /&gt;
	else&lt;br /&gt;
		-- protection au cas ou le sous module serait mal modifié&lt;br /&gt;
		dataLiens = { [''] = { mois = { aucun = 1000, tous = { 1938, 2013 } }, } }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local annee, mois, numMois, jour&lt;br /&gt;
	local decalage = 0&lt;br /&gt;
	-- si pas de jour mais que args[2] est un mois on décale tout et on&lt;br /&gt;
	-- n'affiche pas l'année&lt;br /&gt;
	if trim( args[1] ) == nil and fun.valideMois( trim( args[3] ) ) ~= nil then&lt;br /&gt;
		decalage = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite l'année&lt;br /&gt;
	local bannee = args[3 + decalage]&lt;br /&gt;
	if Outils.notEmpty( bannee ) then&lt;br /&gt;
		annee = tonumber( bannee )&lt;br /&gt;
		if annee == nil and type( bannee ) == 'string'  then&lt;br /&gt;
			-- test si l'année contient av. J.-C.&lt;br /&gt;
			annee = mw.ustring.match( mw.ustring.upper( bannee ), '^(%d+)%sAV%.?%s?J%.?%-?C' )&lt;br /&gt;
			annee = tonumber( annee )&lt;br /&gt;
			if annee then&lt;br /&gt;
				annee = 0 - annee&lt;br /&gt;
			else&lt;br /&gt;
				local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
				if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
					return Outils.erreur( 'Année invalide (' .. bannee .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|A]]')&lt;br /&gt;
				else&lt;br /&gt;
					return Outils.erreur( 'Année invalide (' .. bannee .. ')')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		annee = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le mois&lt;br /&gt;
	local bmois = args[2 + decalage]&lt;br /&gt;
	if Outils.notEmpty( bmois ) then&lt;br /&gt;
		mois, numMois = fun.valideMois( bmois )&lt;br /&gt;
		if mois == nil then&lt;br /&gt;
			-- on teste si le mois est fourni sous forme numérique&lt;br /&gt;
			numMois = tonumber( bmois )&lt;br /&gt;
			mois = fun.nomDuMois( numMois )&lt;br /&gt;
		end&lt;br /&gt;
		if mois == nil then&lt;br /&gt;
			local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
			if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
				return Outils.erreur( 'Mois invalide (' .. bmois .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|M]]')&lt;br /&gt;
			else&lt;br /&gt;
				return Outils.erreur( 'Mois invalide (' .. bmois .. ')')&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
		&lt;br /&gt;
			-- on traite le jour si présent&lt;br /&gt;
			local bjour = args[1 + decalage]&lt;br /&gt;
			if Outils.notEmpty( bjour ) then&lt;br /&gt;
				jour = tonumber( bjour )&lt;br /&gt;
				if jour == nil and type( bjour ) == 'string' then&lt;br /&gt;
					bjour = mw.text.trim( bjour )&lt;br /&gt;
					if bjour == '1er'&lt;br /&gt;
						or bjour == '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;Premier&amp;quot; &amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;' -- correspond à {{1er}}&lt;br /&gt;
					then&lt;br /&gt;
						jour = 1&lt;br /&gt;
					else&lt;br /&gt;
						local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
						if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
							return Outils.erreur( 'Jour invalide (' .. bjour .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|J]]')&lt;br /&gt;
						else&lt;br /&gt;
							return Outils.erreur( 'Jour invalide (' .. bjour .. ')')&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				-- on valide que le jour est correct&lt;br /&gt;
				if jour &amp;lt; 1 or jour &amp;gt; 31 then&lt;br /&gt;
					return Outils.erreur( 'Jour invalide (' .. bjour .. ')' )&lt;br /&gt;
				elseif jour &amp;gt; liste_mois[numMois].nJour then&lt;br /&gt;
					local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
					if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
						return Outils.erreur( 'Jour invalide (' .. bjour .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|J]]')&lt;br /&gt;
					else&lt;br /&gt;
						return Outils.erreur( 'Jour invalide (' .. bjour .. ')')&lt;br /&gt;
					end&lt;br /&gt;
					-- l'année bisextile n'est pas testée pour accepter les dates juliennes.&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- S'il n'y a pas de jour on regarde si la première lettre du mois est en majuscule&lt;br /&gt;
				if mw.ustring.match( bmois, '^%u' ) then&lt;br /&gt;
					-- oui, on passe la première lettre en majuscule&lt;br /&gt;
					mois = ucfirst( mois )&lt;br /&gt;
				end&lt;br /&gt;
				-- s'il n'y a pas d'année non plus on retourne le mois simple&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	-- else&lt;br /&gt;
	--	return Outils.erreur(&amp;quot;Le mois est obligatoire&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le champs optionnel&lt;br /&gt;
	local qualificatif = trim( args[4 + decalage] ) or args.qualificatif&lt;br /&gt;
	&lt;br /&gt;
	-- on traite l'age, naissance et mort&lt;br /&gt;
	local age = trim( args['âge'] or args['age'] )&lt;br /&gt;
	age = age and  fun.age( annee, numMois, jour )&lt;br /&gt;
	local naissance = trim( args.naissance )&lt;br /&gt;
	local mort = trim( args.mort )&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le calendrier&lt;br /&gt;
	local gannee, gmois, gjour = annee, numMois, jour        -- date suivant le calendrier grégorien pour &amp;lt;time&amp;gt;&lt;br /&gt;
	local jannee, jmois, jjour, julien = annee, mois, jour   -- servira éventuellement à a affiché la date selon le calendrier julien&lt;br /&gt;
	local julien2, julien3 = nil, nil                        -- servira éventuellement à a affiché des parenthèses&lt;br /&gt;
	local julien = trim( string.lower( args.julien or '' ) )&lt;br /&gt;
	if annee and jour then&lt;br /&gt;
		local amj = annee * 10000 + numMois * 100 + jour&lt;br /&gt;
		if amj &amp;lt; 15821014 then&lt;br /&gt;
			gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )&lt;br /&gt;
		elseif julien == 'oui' then&lt;br /&gt;
			gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )&lt;br /&gt;
			annee, mois, jour = gannee, liste_mois[gmois][1], gjour&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	-- on génère le résultat&lt;br /&gt;
	&lt;br /&gt;
	-- Déclarations des variables&lt;br /&gt;
	local wikiListe = TableBuilder.new()   -- reçois le texte affiché pour chaque paramètre&lt;br /&gt;
	local iso = TableBuilder.new()         -- reçois le format date ISO de ce paramètre&lt;br /&gt;
	&lt;br /&gt;
	local dataQualificatif = dataLiens[qualificatif or '']&lt;br /&gt;
	if type( dataQualificatif ) ~= 'table' then&lt;br /&gt;
		-- si le qualifiquatif n'est pas dans la base de donnée, on crée une table minimum,&lt;br /&gt;
		-- qui imposera un test sur l'annee, mais considère qu'il n'y a pas de lien sur le jour ou le mois&lt;br /&gt;
		dataQualificatif = { qualificatif = ' ' .. qualificatif, annee = { } }&lt;br /&gt;
	end&lt;br /&gt;
	local dataCat = dataLiens[dataQualificatif.cat]&lt;br /&gt;
	if type( dataCat ) ~= 'table' or dataCat == dataQualificatif then&lt;br /&gt;
		dataCat = { qualificatif = '' }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Date julienne&lt;br /&gt;
	if jjour ~= jour then&lt;br /&gt;
		if jjour == 1 then&lt;br /&gt;
			jjour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
		if jannee ~= annee then&lt;br /&gt;
			julien3 = '(&amp;lt;abbr class=abbr title=&amp;quot;selon le calendrier julien&amp;quot;&amp;gt;' .. jjour .. ' ' .. jmois .. ' ' .. jannee .. '&amp;lt;/abbr&amp;gt;)'&lt;br /&gt;
		else&lt;br /&gt;
			julien2 = '(&amp;lt;abbr class=abbr title=&amp;quot;selon le calendrier julien&amp;quot;&amp;gt;' .. jjour .. ' ' .. jmois .. '&amp;lt;/abbr&amp;gt;)'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	-- le jour si présent&lt;br /&gt;
	local qualifJour = ''&lt;br /&gt;
	if jour then&lt;br /&gt;
		-- éphémérides du qualificatif, ou de sa catégorie, ou générale.&lt;br /&gt;
		qualifJour = dataQualificatif.jour and dataQualificatif.qualificatif&lt;br /&gt;
			or dataCat.jour and dataCat.qualificatif&lt;br /&gt;
			or ''&lt;br /&gt;
		local lien = jour .. ' ' .. mois .. ' ' .. qualifJour&lt;br /&gt;
		if jour == 1 then&lt;br /&gt;
			jour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
			lien = '1er ' .. mois .. ' ' .. qualifJour&lt;br /&gt;
		end&lt;br /&gt;
		-- s'il n'y a pas de lien sur le mois, il sera affiché avec le jour.&lt;br /&gt;
		wikiListe.insert( '[[' .. lien .. '|' .. jour .. ']]' )&lt;br /&gt;
		wikiListe.insert( '[[' .. lien .. '|' .. jour .. ' '.. mois .. ']]' )&lt;br /&gt;
		iso.insert( 1, string.sub( '0' .. gjour, -2 ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- le mois&lt;br /&gt;
	if mois then&lt;br /&gt;
		local lien&lt;br /&gt;
		if annee then&lt;br /&gt;
			lien = existDate( dataQualificatif, annee, mois ) or existDate( dataCat, annee, mois )&lt;br /&gt;
			if lien == nil and qualificatif and qualifJour == '' then&lt;br /&gt;
				-- test nouveau test sans le qualificatif uniquement s'il n'y a pas d'éphémérides pour ce qualificatif.&lt;br /&gt;
				lien = existDate( dataLiens[''], annee, mois )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if lien then&lt;br /&gt;
			-- s'il y a un lien on retire le lien affichant 'jour mois' pour ajouter '[[mois annee|mois']]&lt;br /&gt;
			wikiListe.remove()&lt;br /&gt;
			wikiListe.insert(  '[[' .. lien .. '|' .. mois .. ']]' )&lt;br /&gt;
		else&lt;br /&gt;
			-- sinon on retire le lien affichant 'jour' pour ne garder que le lien 'jour mois'&lt;br /&gt;
			wikiListe.remove( #wikiListe - 1 )&lt;br /&gt;
			-- s'il n'y avait pas je jour, la liste est vide mais ça ne pose pas de problème&lt;br /&gt;
			-- sauf si l'année n'est pas affichée :&lt;br /&gt;
			if #wikiListe == 0 and ( annee == nil or decalage &amp;gt; 0 ) then&lt;br /&gt;
				return mois&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		iso.insert( 1, string.sub( '0' .. gmois, -2 ) )&lt;br /&gt;
	end&lt;br /&gt;
	if( julien2 ) then&lt;br /&gt;
		wikiListe.insert( julien2 )&lt;br /&gt;
	end&lt;br /&gt;
	-- l'année&lt;br /&gt;
	if annee and decalage == 0 then -- seulement si on doit l'affichée&lt;br /&gt;
		local lien = existDate( dataQualificatif, annee ) or existDate( dataCat, annee )&lt;br /&gt;
		local texte = annee&lt;br /&gt;
		if annee &amp;lt; 0 then&lt;br /&gt;
			local annneeAvJc = 0 - annee&lt;br /&gt;
			lien = lien or ( annneeAvJc .. ' av. J.-C.' )&lt;br /&gt;
			local avJC = trim( string.lower( args.avJC or '' ) )&lt;br /&gt;
			if args.avJC == 'non' then&lt;br /&gt;
				texte = annneeAvJc&lt;br /&gt;
			else&lt;br /&gt;
				texte = annneeAvJc .. ' &amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;'&lt;br /&gt;
					.. annneeAvJc .. ' avant Jésus-Christ&amp;quot;&amp;gt;av. J.-C.&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			iso.insert( 1, tostring( annneeAvJc - 10000 ) )   -- ! avant JC, ce n'est pas une date iso ! Pour un tri correct sur wiki.&lt;br /&gt;
		else&lt;br /&gt;
			iso.insert( 1, string.sub( '000' .. annee , -4 ) )&lt;br /&gt;
		end&lt;br /&gt;
		lien = lien or annee&lt;br /&gt;
		if mois and #wikiListe == 0 then&lt;br /&gt;
			-- si le mois n'a pas de lien et n'est pas affiché avec le jour, il est affiché avec l'année.&lt;br /&gt;
			texte = mois .. ' ' .. texte&lt;br /&gt;
		end&lt;br /&gt;
		wikiListe.insert(  '[[' .. lien .. '|' .. texte .. ']]' )&lt;br /&gt;
	end&lt;br /&gt;
	if( julien3 ) then&lt;br /&gt;
		wikiListe.insert( julien3 )&lt;br /&gt;
	end&lt;br /&gt;
	-- l'age&lt;br /&gt;
	if type( age ) == 'number' and age &amp;gt;= 0 then&lt;br /&gt;
		if age == 0 then&lt;br /&gt;
			age = '(moins d\'un&amp;amp;nbsp;an)'&lt;br /&gt;
		elseif age == 1 then&lt;br /&gt;
			age = '(1&amp;amp;nbsp;an)'&lt;br /&gt;
		else&lt;br /&gt;
			age = '(' .. age .. '&amp;amp;nbsp;ans)'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- compilation du résultat&lt;br /&gt;
	local wikiTexte = wikiListe.concat( ' ' )&lt;br /&gt;
	local isoTexte = iso.concat( '-' )&lt;br /&gt;
	&lt;br /&gt;
	-- On ajoute un peu de sémantique.&lt;br /&gt;
	local wikiHtml = mw.html.create( '' )&lt;br /&gt;
	&lt;br /&gt;
	local dateHtml = wikiHtml:tag( 'span' )&lt;br /&gt;
			:addClass( 'date-lien nowrap' )&lt;br /&gt;
			:addClass( 'datasortkey' )&lt;br /&gt;
			:attr( 'data-sort-value', isoTexte )&lt;br /&gt;
			:wikitext( wikiTexte )&lt;br /&gt;
	if naissance then &lt;br /&gt;
		dateHtml:addClass( 'bday' )&lt;br /&gt;
	elseif mort then&lt;br /&gt;
		dateHtml:addClass( 'dday' )&lt;br /&gt;
	end&lt;br /&gt;
	if age then&lt;br /&gt;
		wikiHtml:wikitext( ' ' )&lt;br /&gt;
				:tag( 'span' )&lt;br /&gt;
					:addClass( 'noprint')&lt;br /&gt;
					:wikitext( age )&lt;br /&gt;
					:done()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( wikiHtml )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- voir émule le modèle:Inscription date&lt;br /&gt;
-- la détection des arguments permet d'utilisé la fonction depuis un modèle, depuis invoke, ou depuis une autre fonction.&lt;br /&gt;
-- pour facilité l'écriture de lua, annee (sans accent) est accepté lors de l'appel depuis lua.&lt;br /&gt;
function fun.inscriptionDate( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	local annee = Outils.notEmpty( args['année'], args.annee, args.year )&lt;br /&gt;
	if annee then&lt;br /&gt;
		-- si l'année est renseigné, on essaye de trouver le mois&lt;br /&gt;
		local mois = Outils.notEmpty( args.mois, args.month )&lt;br /&gt;
		&lt;br /&gt;
		if mois then&lt;br /&gt;
			mois = fun.determinationMois( mois, frame ) or mois&lt;br /&gt;
			local jour = Outils.notEmpty( args.jour, args.day, args['quantième'] )&lt;br /&gt;
			if jour then&lt;br /&gt;
				-- si le mois est valide on détermine le jour&lt;br /&gt;
				jour = tonumber( jour ) or jour    -- suppresion des 0 qui trainent&lt;br /&gt;
				if jour == 1 or jour == '1er' then&lt;br /&gt;
					jour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;Premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
				end&lt;br /&gt;
				return jour .. '&amp;amp;nbsp;' .. mois .. '&amp;amp;nbsp;' .. annee&lt;br /&gt;
			else&lt;br /&gt;
				return mois .. '&amp;amp;nbsp;' .. annee&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return annee&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- si annee n'est pas précisé, on utilise la paramètre date&lt;br /&gt;
		local date = Outils.validTextArg( args, 'date' )&lt;br /&gt;
		if date then&lt;br /&gt;
			return '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. date .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- la fonction dateISO renvoie un date au format aaaa-mm-jj (sans liens)&lt;br /&gt;
-- l'année peut être sous la forme 2013 ou [[2013 en litérature|2013]]&lt;br /&gt;
-- le mois peut être en lettre ou en chiffres&lt;br /&gt;
-- le jour peut être sous la forme '05', '{{1er}}' ou 'vendredi 13'&lt;br /&gt;
function fun.dateISO( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	local annee = Outils.notEmpty( args['année'], args.annee, args.year, args.date )&lt;br /&gt;
	-- extraction de l'année&lt;br /&gt;
	if type( annee ) == 'string' then&lt;br /&gt;
		annee = ( tonumber( annee )	-- match '2013'&lt;br /&gt;
				or string.match ( annee, '%D(%d%d%d%d)%D' ) -- match  '[[2013 en musique|2013]]'&lt;br /&gt;
				or string.match ( annee, '%D(%d%d%d%d)$' )  -- match '17 septembre 2013'&lt;br /&gt;
				or string.match ( annee, '^(%d%d%d%d)%D' )  -- match '2013-09-17'&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	annee = tonumber( annee )&lt;br /&gt;
	&lt;br /&gt;
	-- le format de date iso est défini suivant le calendrier grégorien.&lt;br /&gt;
	-- Avant l'année 1583 la date est calendrier est probablement du calendrier julien,&lt;br /&gt;
	-- donc autant s'abstenir.&lt;br /&gt;
	if annee and annee &amp;gt; 1582  then&lt;br /&gt;
		local mois = Outils.notEmpty( args.mois, args.month )&lt;br /&gt;
		-- num mois trouve le numéro du mois, qu'il soit numérique ou texte, complet ou abrégé.&lt;br /&gt;
		local nomMois, numMois = fun.determinationMois( mois )&lt;br /&gt;
		if numMois then&lt;br /&gt;
			mois = '-' .. string.sub( '0' .. numMois, -2 )&lt;br /&gt;
			&lt;br /&gt;
			local jour = Outils.notEmpty( args.jour, args.day, args['quantième'] )&lt;br /&gt;
			if type( jour ) == 'string' then&lt;br /&gt;
				jour = tonumber( jour ) or tonumber( string.match ( jour, '%d+') )&lt;br /&gt;
			end&lt;br /&gt;
			jour = tonumber( jour )&lt;br /&gt;
			if jour and jour &amp;lt;= liste_mois[numMois].nJour then&lt;br /&gt;
				jour = '-' .. string.sub( '0' .. jour, -2 )&lt;br /&gt;
				return annee .. mois .. jour&lt;br /&gt;
			else&lt;br /&gt;
				return annee .. mois&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return tostring( annee )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Rang du jour dans l'année&lt;br /&gt;
-- Usage : do_dayRank{année,mois,jour}&lt;br /&gt;
function fun.do_dayRank(arguments)&lt;br /&gt;
	local yr = tonumber(arguments.year or arguments[1]) or 1&lt;br /&gt;
	local mt = tonumber(arguments.month or arguments[2]) or 1&lt;br /&gt;
	local dy = tonumber(arguments.day or arguments[3]) or 1&lt;br /&gt;
	-- Rangs des premiers des mois&lt;br /&gt;
	local ranks = {0,31,59,90,120,151,181,212,243,273,304,334}&lt;br /&gt;
	&lt;br /&gt;
	local rank = (ranks[mt] or 0) + dy - 1&lt;br /&gt;
	if(fun.isLeapYear(yr) and (mt &amp;gt;= 3)) then&lt;br /&gt;
		rank = rank+1&lt;br /&gt;
	end&lt;br /&gt;
	return rank&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Nombre de jours entre deux années (du 1er janvier au 1er janvier)&lt;br /&gt;
-- Suit le calendrier grégorien&lt;br /&gt;
function fun.do_daysBetween(arguments)&lt;br /&gt;
	local yr1 = tonumber(arguments[1]) or 0&lt;br /&gt;
	local yr2 = tonumber(arguments[2]) or 0&lt;br /&gt;
	&lt;br /&gt;
	return fun.daysSinceOrigin(yr2) - fun.daysSinceOrigin(yr1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Nombre de jours depuis l'année 1 (du 1er janvier au 1er janvier)&lt;br /&gt;
function fun.daysSinceOrigin(year)&lt;br /&gt;
	local yr = year-1&lt;br /&gt;
	return 365*yr + math.floor(yr/4) - math.floor(yr/100) + math.floor(yr/400)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Test d'année bissextile (Suit le calendrier grégorien)&lt;br /&gt;
function fun.isLeapYear(year)&lt;br /&gt;
	local yr = tonumber(year) or 1&lt;br /&gt;
	return (yr%4 == 0) and ((yr%100 ~= 0) or (yr%400 == 0))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Conversion d'un nombre en chiffres romains&lt;br /&gt;
function fun.toRoman(number)&lt;br /&gt;
	local n = math.floor(number)&lt;br /&gt;
	local letters = {&amp;quot;I&amp;quot;,&amp;quot;V&amp;quot;,&amp;quot;X&amp;quot;,&amp;quot;L&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;M&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;}&lt;br /&gt;
	local pattern = {&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;00&amp;quot;,&amp;quot;000&amp;quot;,&amp;quot;01&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;10&amp;quot;,&amp;quot;100&amp;quot;,&amp;quot;1000&amp;quot;,&amp;quot;02&amp;quot;}&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	if(n&amp;lt;=0 or n&amp;gt;=4000) then&lt;br /&gt;
		result = &amp;quot;---&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		for i=1,7,2 do&lt;br /&gt;
			p = pattern[n%10 + 1]&lt;br /&gt;
			for j=0,2 do&lt;br /&gt;
				p = string.gsub(p,tostring(j),letters[i+j])&lt;br /&gt;
			end&lt;br /&gt;
			result = p .. result&lt;br /&gt;
			n = math.floor(n/10)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Conversion et affichage d'une date dans le calendrier républicain&lt;br /&gt;
function fun.dateRepublicain(frame)&lt;br /&gt;
	local pframe = frame:getParent()&lt;br /&gt;
	local arguments = pframe.args&lt;br /&gt;
	return fun.formatRepCal(fun.do_toRepCal(arguments))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Calcul d'une date dans le calendrier républicain&lt;br /&gt;
-- On suppose que les années 4n+3 sont sextiles (3, 7, 11...)&lt;br /&gt;
function fun.do_toRepCal(arguments)&lt;br /&gt;
	local yr = tonumber(arguments.year or arguments[1]) or 2000&lt;br /&gt;
	-- rang absolu du jour demandé, le jour 0 étant le 22 septembre 1792 (1er jour de l'an I)&lt;br /&gt;
	local repDays = fun.do_dayRank(arguments) + fun.do_daysBetween{1792,yr} - fun.do_dayRank{1792,9,22}&lt;br /&gt;
	local repYear = math.floor((repDays+731)/365.25) - 1&lt;br /&gt;
	local repDayRank = repDays - 365*(repYear-1) - math.floor(repYear/4)&lt;br /&gt;
	local repMonth, repDay = math.floor(repDayRank/30)+1, (repDayRank%30)+1&lt;br /&gt;
	return {repYear, repMonth, repDay}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Formatage d'une date selon le calendrier républicain&lt;br /&gt;
-- Usage : fun.formatRepCal{année,mois,jour}&lt;br /&gt;
function fun.formatRepCal(arguments)&lt;br /&gt;
	local months = {&amp;quot;Vendémiaire&amp;quot;,&amp;quot;Brumaire&amp;quot;,&amp;quot;Frimaire&amp;quot;,&amp;quot;Nivôse&amp;quot;,&amp;quot;Pluviôse&amp;quot;,&amp;quot;Ventôse&amp;quot;,&amp;quot;Germinal&amp;quot;,&amp;quot;Floréal&amp;quot;,&amp;quot;Prairial&amp;quot;,&amp;quot;Messidor&amp;quot;,&amp;quot;Thermidor&amp;quot;,&amp;quot;Fructidor&amp;quot;}&lt;br /&gt;
	local extras = {&amp;quot;de la vertu&amp;quot;,&amp;quot;du génie&amp;quot;,&amp;quot;du travail&amp;quot;,&amp;quot;des récompenses&amp;quot;,&amp;quot;de l'opinion&amp;quot;,&amp;quot;de la révolution&amp;quot;}&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	if(arguments[2] &amp;lt; 13) then&lt;br /&gt;
		result = result .. tostring(arguments[3]) .. &amp;quot;&amp;amp;nbsp;&amp;quot; .. months[arguments[2]]&lt;br /&gt;
	else&lt;br /&gt;
		result = result .. &amp;quot;jour &amp;quot; .. extras[arguments[3]]&lt;br /&gt;
	end&lt;br /&gt;
	result = result .. &amp;quot; de l'an &amp;quot; .. fun.toRoman(arguments[1])&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Voir Modèle:Âge&lt;br /&gt;
-- retourne l'age en fonction de la ou les dates fournies. La valeur retounée est de type 'number'&lt;br /&gt;
-- Parammètres :&lt;br /&gt;
-- 1, 2, 3 : année, mois jour de naissance (supposé dans le calendrier grégorien)&lt;br /&gt;
-- 4, 5, 6 : année, mois, joue du calcul (facultatif, par défaut la date UTC courante).&lt;br /&gt;
function fun.age( an, mn, jn, ac, mc, jc )&lt;br /&gt;
	local an = tonumber( an )&lt;br /&gt;
	if an == nil then&lt;br /&gt;
		-- pas de message d'erreur qui risque de faire planter la fonction appelante&lt;br /&gt;
		-- à elle de gérer ce retour.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	-- les jours et mois sont par défaut égal à 1, pour pouvoir calculer un age même si la date est incompète.&lt;br /&gt;
	local mn = tonumber( mn ) or 1&lt;br /&gt;
	local jn = tonumber( jn ) or 1&lt;br /&gt;
	&lt;br /&gt;
	local today = os.date( '!*t' )&lt;br /&gt;
	local ac = tonumber( ac ) or today.year&lt;br /&gt;
	local mc = tonumber( mc ) or today.month&lt;br /&gt;
	local jc = tonumber( jc ) or today.day&lt;br /&gt;
	&lt;br /&gt;
	local age = ac - an&lt;br /&gt;
	if mc &amp;lt; mn or ( mc == mn and jc &amp;lt; jn ) then&lt;br /&gt;
		age = age - 1&lt;br /&gt;
	end&lt;br /&gt;
	return age&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fun.modeleAge( frame )&lt;br /&gt;
	args = frame.getParent().args&lt;br /&gt;
	local annee = args[1] or args['année']&lt;br /&gt;
	if annee == nil then&lt;br /&gt;
		return Outils.erreur( &amp;quot;Il faut au minimum l'année pour calculer un âge&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	local age = fun.age (&lt;br /&gt;
		args[1] or args['année'],&lt;br /&gt;
		args[2] or args['mois'],&lt;br /&gt;
		args[3] or args['jour'],&lt;br /&gt;
		args[4],&lt;br /&gt;
		args[5],&lt;br /&gt;
		args[6]&lt;br /&gt;
	)&lt;br /&gt;
	if age then&lt;br /&gt;
		return age&lt;br /&gt;
	else&lt;br /&gt;
		return Outils.erreur(&amp;quot;les paramètres doivent être des chiffres&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul du jour julien à partir d'une date du calendrier grégorien&lt;br /&gt;
function fun.julianDay( year, month, day, hour, min, sec )&lt;br /&gt;
	local julian&lt;br /&gt;
	julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )&lt;br /&gt;
			- math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 100 )&lt;br /&gt;
			+ math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 400 )&lt;br /&gt;
			+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )&lt;br /&gt;
			+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400&lt;br /&gt;
			- 32167.5&lt;br /&gt;
	return julian&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul du jour julien à partir d'une date du calendrier julier&lt;br /&gt;
function fun.julianDayJulian( year, month, day, hour, min, sec )&lt;br /&gt;
	local julian&lt;br /&gt;
	julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )&lt;br /&gt;
			+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )&lt;br /&gt;
			+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400&lt;br /&gt;
			- 32205.5&lt;br /&gt;
	return julian&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier grégorien à partir du jour julien&lt;br /&gt;
function fun.julianDayToGregorian( julianDay )&lt;br /&gt;
	local base = math.floor( julianDay + 32044.5 )  -- 1 March -4800 (proleptic Gregorian date)&lt;br /&gt;
	local nCentury = math.floor( ( base * 4 + 3 ) / 146097 )&lt;br /&gt;
	local sinceCentury = base - math.floor( nCentury * 146097 / 4 )&lt;br /&gt;
	local nYear = math.floor( ( sinceCentury * 4 + 3 ) / 1461 )&lt;br /&gt;
	local sinceYear = sinceCentury - math.floor( nYear * 1461 / 4 )&lt;br /&gt;
	local nMonth = math.floor( ( sinceYear * 5 + 2 ) / 153 )&lt;br /&gt;
	&lt;br /&gt;
	local day = sinceYear - math.floor( (  nMonth  * 153 + 2 ) / 5 ) + 1&lt;br /&gt;
	local month = nMonth  - math.floor(  nMonth  / 10 ) * 12 + 3&lt;br /&gt;
	local year = math.floor( sinceYear / 306 ) + nYear + 100 * nCentury - 4800&lt;br /&gt;
	&lt;br /&gt;
	return year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier julien à partir du jour julien&lt;br /&gt;
-- calcul basé sur l'algorythme de la page fr.wikipedia.org/wiki/Jour_julien (1/10/2013)&lt;br /&gt;
function fun.julianDayToJulian( julianDay )&lt;br /&gt;
	local year = math.modf( ( julianDay * 4 - 6884469 ) / 1461 )&lt;br /&gt;
	local r2 = julianDay - math.modf( ( 1461 * year + 6884472 ) / 4 )&lt;br /&gt;
	local month = math.modf( ( 5 * r2 + 461 ) / 153 )&lt;br /&gt;
	local day = r2 - math.modf( ( 153 * month - 457 ) / 5 ) + 1&lt;br /&gt;
	if month &amp;gt; 12 then&lt;br /&gt;
		year = year + 1&lt;br /&gt;
		month = month - 12&lt;br /&gt;
	end&lt;br /&gt;
	return year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier grégorien à partir d'une date dans le calendrier julien&lt;br /&gt;
function fun.julianToGregorian( year, month, day )&lt;br /&gt;
	return fun.julianDayToGregorian( fun.julianDayJulian( year, month, day ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier julien à partir d'une date dans le calendrier grégorien&lt;br /&gt;
function fun.gregorianToJulian( year, month, day )&lt;br /&gt;
	year = tonumber(year)&lt;br /&gt;
	if month then month = tonumber(month) else month = 6 end --prend une valeur centrale pour donner un best &amp;quot;guess&amp;quot;&lt;br /&gt;
	if day then day = tonumber(day) else day = 15 end&lt;br /&gt;
	return fun.julianDayToJulian( fun.julianDay( year, month, day ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- erreurModuleData affiche  d'un message d'erreur si le Module:Langue/Data n'a pas été chargé correctement,&lt;br /&gt;
-- pour la page de discussion de la base de donnée et ceux qui veulent surveiller cette page.&lt;br /&gt;
function fun.erreurModuleData()&lt;br /&gt;
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )&lt;br /&gt;
	if success == false then&lt;br /&gt;
		local message = [[&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Le chargement du module Date/Data génère une erreur : &amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;%s&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Cette erreur doit être corrigée au plus vite car des milliers de page ne s'affichent pas correctement&amp;lt;/span&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
		return string.format( message, resultat )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- checkDataCat génère des liens vers les pages annuelles, mensuelles et d'éphémérides liè aux&lt;br /&gt;
-- catégories du Module:Date/Data. La date la plus ancienne dépend de 'aucun' et 'seul[1]'&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
-- 	1 : la catégorie. Il y aura une section par qualificatif de cette catégorie.&lt;br /&gt;
-- 	mois : oui pour avoir les liens vers les pages mensuelles et éphémérides (4 jours dans l'année)&lt;br /&gt;
-- 	alias : pour avoir des lien pour les alias en plus des qualificatif&lt;br /&gt;
function fun.checkDataCat( frame )&lt;br /&gt;
	local category = trim(frame.args[1])&lt;br /&gt;
	local monthLinks = frame .args.mois == 'oui'&lt;br /&gt;
	local alias = frame.args.alias == 'oui'&lt;br /&gt;
	local dataLink = mw.loadData( 'Module:Date/Data' )&lt;br /&gt;
	local wikiList =  TableBuilder.new()&lt;br /&gt;
	local currentYear = tonumber( os.date( '%Y' ) )&lt;br /&gt;
	local columns = '&amp;lt;div style=&amp;quot;-moz-column-width:5em;-webkit-column-width:5em;column-width:5em;-moz-column-gap:1em;-webkit-column-gap:1em;column-gap:1em;text-align:left;&amp;quot;&amp;gt;'&lt;br /&gt;
	local newSection&lt;br /&gt;
	if monthLinks then&lt;br /&gt;
		newSection = '\n\n== %s ==\n\n=== Années ===\n' .. columns&lt;br /&gt;
	else&lt;br /&gt;
		newSection ='\n\n== %s ==\n' .. columns&lt;br /&gt;
	end&lt;br /&gt;
	for field, dataField in pairs( dataLink ) do&lt;br /&gt;
		-- boucle sur tous les qualificatif ayant pour catégorie le premier paramère&lt;br /&gt;
		if dataField.cat == category or ( category == 'cat' and dataField.cat == field ) then&lt;br /&gt;
			local monthInitialYear, initialYear&lt;br /&gt;
			-- définition de l'année à partir de laquelle on va tester toutes les année / mois&lt;br /&gt;
			if dataField.qualificatif == field or ( category == 'cat' and dataField.cat == field ) then&lt;br /&gt;
				if dataField.annee and dataField.annee.aucun and dataField.annee.aucun &amp;lt; currentYear then&lt;br /&gt;
					local aucun = ( dataField.annee.seul and dataField.annee.seul[1] ) or dataField.annee.aucun&lt;br /&gt;
					initialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 50 )&lt;br /&gt;
				else&lt;br /&gt;
					initialYear = currentYear - 50&lt;br /&gt;
				end&lt;br /&gt;
				if dataField.mois and tonumber( dataField.mois.aucun ) and ( tonumber( dataField.mois.aucun ) &amp;lt; currentYear ) then&lt;br /&gt;
					local aucun = dataField.mois.aucun&lt;br /&gt;
					monthInitialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 8 )&lt;br /&gt;
				else&lt;br /&gt;
					monthInitialYear = currentYear - 8&lt;br /&gt;
				end&lt;br /&gt;
			elseif alias then&lt;br /&gt;
				-- si le paramètre alias est défini on teste aussi tous les alias, sinon ils sont ignorés&lt;br /&gt;
				initialYear = currentYear - 50&lt;br /&gt;
				monthInitialYear = currentYear - 8&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- création de l'ensembles des liens&lt;br /&gt;
			if initialYear then&lt;br /&gt;
				-- ajout de lien vers les pages annuelles de l'année en court + 5 jusqu'à initialYear&lt;br /&gt;
				wikiList.insert( string.format( newSection, field ) )&lt;br /&gt;
				local fieldLink = ' ' .. field&lt;br /&gt;
				if category == 'cat' then&lt;br /&gt;
					fieldLink = ' ' .. dataField.qualificatif&lt;br /&gt;
				end&lt;br /&gt;
				for year = ( currentYear + 5 ), initialYear, -1  do&lt;br /&gt;
					wikiList.insert( '\n* [[' .. year .. fieldLink ..'|' .. year .. ']]' )&lt;br /&gt;
				end&lt;br /&gt;
				wikiList.insert( '\n&amp;lt;/div&amp;gt;' )&lt;br /&gt;
				&lt;br /&gt;
				if monthLinks then&lt;br /&gt;
					-- insertstion de liens vers les mois de l'année en court + 1 jusqu'à monthInitialYear&lt;br /&gt;
					wikiList.insert( '\n\n=== Mois ==='  )&lt;br /&gt;
					local month, sep&lt;br /&gt;
					for year = ( currentYear + 1 ), monthInitialYear, -1  do&lt;br /&gt;
						wikiList.insert( '\n* ' .. year .. ' : ' )&lt;br /&gt;
						sep = ' • '&lt;br /&gt;
						for j = 1, 12 do&lt;br /&gt;
							month = ucfirst( liste_mois[j][1] ) .. ' '&lt;br /&gt;
							if j == 12 then sep = ''&lt;br /&gt;
							end&lt;br /&gt;
							wikiList.insert( '[[' .. month .. year .. ' ' .. fieldLink .. '|' .. month .. ']]' .. sep )&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					-- insertion de quelques date pour tester les éphémérides&lt;br /&gt;
					wikiList.insert( '\n\n=== Jours ==='  )&lt;br /&gt;
					wikiList.insert( '\n* [[1er janvier ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[14 mars ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[22 juin ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[3 septembre ' .. fieldLink .. ']]' )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( wikiList )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Cette fonction retourne &amp;quot;CET&amp;quot; ou &amp;quot;CEST&amp;quot; selon que dans la pseudo-timezone en cours&lt;br /&gt;
    c'est l'heure d'été ou l'heure d'hiver.&lt;br /&gt;
  Cette fonction n'a de sens a priori que pour des modèles utilisés en Europe&lt;br /&gt;
  &lt;br /&gt;
  Paramètre optionnel non nommé : &amp;quot;sans lien&amp;quot; : retourne le texte CET/CEST. sinon&lt;br /&gt;
    retourne ce même texte avec un wikilien vers les articles correspondant&lt;br /&gt;
--]]&lt;br /&gt;
function fun.CEST(frame)&lt;br /&gt;
	-- option : ne pas créer de wikilien&lt;br /&gt;
	local opt = mw.text.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	-- on récupère l'information dans la zone courante&lt;br /&gt;
	local t = mw.getContentLanguage():formatDate(&amp;quot;I&amp;quot;, nil, true)&lt;br /&gt;
	&lt;br /&gt;
	if (t == &amp;quot;1&amp;quot;) then  -- heure d'été&lt;br /&gt;
		if (opt == &amp;quot;sans lien&amp;quot;) then&lt;br /&gt;
			return &amp;quot;CEST&amp;quot;&lt;br /&gt;
		elseif (opt == &amp;quot;décalage&amp;quot;) then&lt;br /&gt;
			return &amp;quot;2&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[Heure d'été d'Europe centrale|CEST]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else  -- heure d'hiver (ou autre zone où ça ne s'applique pas)&lt;br /&gt;
		if (opt == &amp;quot;sans lien&amp;quot;) then&lt;br /&gt;
			return &amp;quot;CET&amp;quot;&lt;br /&gt;
		elseif (opt == &amp;quot;décalage&amp;quot;) then&lt;br /&gt;
			return &amp;quot;1&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[Heure normale d'Europe centrale|CET]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return fun&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=12567&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=12567&amp;oldid=prev"/>
		<updated>2014-06-08T15:00:29Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local fun = {}&lt;br /&gt;
&lt;br /&gt;
local TableBuilder = require( 'Module:TableBuilder' )&lt;br /&gt;
local Outils = require( 'Module:Outils' )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- nettoie un paramètre non nommé (vire les espaces au début et à la fin)&lt;br /&gt;
-- retourne  nil si le texte est vide ou n'est pas du texte. Attention c'est important pour les fonction qui l'utilise.&lt;br /&gt;
local trim = Outils.trim&lt;br /&gt;
&lt;br /&gt;
local function ucfirst( str )&lt;br /&gt;
	return mw.ustring.upper( mw.ustring.sub( str, 1, 1 ) ) .. mw.ustring.sub( str, 2 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- liste des mois, écriture exacte et simplifiée, en minuscule&lt;br /&gt;
local liste_mois = {&lt;br /&gt;
	{ &amp;quot;janvier&amp;quot;, &amp;quot;jan.&amp;quot;, &amp;quot;janv.&amp;quot;, &amp;quot;jan&amp;quot;, &amp;quot;janv&amp;quot;, &amp;quot;january&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;février&amp;quot;, &amp;quot;fevrier&amp;quot;, &amp;quot;fev.&amp;quot;, &amp;quot;fev&amp;quot;, &amp;quot;fév.&amp;quot;, &amp;quot;fév&amp;quot;, &amp;quot;february&amp;quot;, nJour = 29 },&lt;br /&gt;
	{ &amp;quot;mars&amp;quot;, &amp;quot;mar.&amp;quot;, &amp;quot;mar&amp;quot;, &amp;quot;march&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;avril&amp;quot;, &amp;quot;avr.&amp;quot;, &amp;quot;avr&amp;quot;, &amp;quot;apr&amp;quot;, &amp;quot;april&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;mai&amp;quot;, &amp;quot;may&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;juin&amp;quot;, &amp;quot;jun&amp;quot;, &amp;quot;june&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;juillet&amp;quot;, &amp;quot;juil.&amp;quot;, &amp;quot;juil&amp;quot;, &amp;quot;juill.&amp;quot;, &amp;quot;juill&amp;quot;, &amp;quot;jul&amp;quot;, &amp;quot;july&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;août&amp;quot;, &amp;quot;aout&amp;quot;, &amp;quot;aou&amp;quot;, &amp;quot;aug&amp;quot;, &amp;quot;august&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;septembre&amp;quot;, &amp;quot;sept.&amp;quot;, &amp;quot;sept&amp;quot;, &amp;quot;sep.&amp;quot;, &amp;quot;sep&amp;quot;, &amp;quot;september&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;octobre&amp;quot;, &amp;quot;oct.&amp;quot;, &amp;quot;oct&amp;quot;, &amp;quot;october&amp;quot;, nJour = 31 },&lt;br /&gt;
	{ &amp;quot;novembre&amp;quot;, &amp;quot;nov.&amp;quot;, &amp;quot;nov&amp;quot;, &amp;quot;november&amp;quot;, nJour = 30 },&lt;br /&gt;
	{ &amp;quot;décembre&amp;quot;, &amp;quot;decembre&amp;quot;, &amp;quot;déc.&amp;quot;, &amp;quot;dec.&amp;quot;, &amp;quot;dec&amp;quot;, &amp;quot;déc&amp;quot;, &amp;quot;december&amp;quot;, nJour = 31 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- nom du mois à partir du numéro&lt;br /&gt;
function fun.nomDuMois( num )&lt;br /&gt;
	if type( num ) ~= &amp;quot;number&amp;quot; or num &amp;lt; 1 or num &amp;gt; 12 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return liste_mois[num][1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- valide que la chaîne passée est un mois valide.&lt;br /&gt;
-- retourne le nom complet ou nil si non reconnu&lt;br /&gt;
-- si reconnu, retourne aussi le numéro du mois [1-12]&lt;br /&gt;
function fun.valideMois( mois )&lt;br /&gt;
	if type( mois ) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local m = mw.ustring.lower( mw.text.trim( mois ) )&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, 12 do&lt;br /&gt;
		local j = 1&lt;br /&gt;
		while liste_mois[i][j] ~= nil do&lt;br /&gt;
			if liste_mois[i][j] == m then&lt;br /&gt;
				return liste_mois[i][1], i&lt;br /&gt;
			end&lt;br /&gt;
			j = j + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- pas trouvé = return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- determinationMois trouve le numéro du mois et son nom,&lt;br /&gt;
-- à partir de son nom, de son numéro ou d'une expression mathématique.&lt;br /&gt;
-- l'objet frame est facultatif, mais permet de tester si mois est une expression type '2+3'&lt;br /&gt;
function fun.determinationMois( mois, frame )&lt;br /&gt;
	local num, nom&lt;br /&gt;
	if tonumber( mois ) then&lt;br /&gt;
		num = math.floor( math.fmod( tonumber( mois ) - 1, 12 )  ) + 1&lt;br /&gt;
	elseif type( mois ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
		nom, num = fun.valideMois( mois )&lt;br /&gt;
		if nom == nil and frame and frame.callParserFunction then&lt;br /&gt;
			-- essai de détermination d'un nombre avec le parser #expr de Mediawiki.&lt;br /&gt;
			-- la fonction s'appelle sans l'objet frame pour ne pas tourner en boucle.&lt;br /&gt;
			nom, num = fun.determinationMois( frame:callParserFunction( '#expr', mois ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if num and not nom then&lt;br /&gt;
		nom = liste_mois[num][1]&lt;br /&gt;
	end&lt;br /&gt;
	return nom, num&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--  fonction interne à modeleDate, pour déterminer si on peut se passer de faire un ifexit&lt;br /&gt;
local function existDate( dataQualificatif, annee, mois )&lt;br /&gt;
	local data&lt;br /&gt;
	if mois then&lt;br /&gt;
		data = dataQualificatif.mois&lt;br /&gt;
	else&lt;br /&gt;
		data = dataQualificatif.annee&lt;br /&gt;
	end&lt;br /&gt;
	if type( data ) ~= 'table' then&lt;br /&gt;
		-- si data n'existe pas c'est que l'on considère qu'il n'y a pas de lien.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	-- le qualificatif est remplacer par celui de la base de donnée, ce qui permet des alias.&lt;br /&gt;
	local lien = annee .. ' ' .. ( dataQualificatif.qualificatif or '' )&lt;br /&gt;
	local seul = annee&lt;br /&gt;
	if mois then&lt;br /&gt;
		lien = mois .. ' ' .. lien&lt;br /&gt;
		seul = ucfirst( mois ) .. ' ' .. annee&lt;br /&gt;
	end&lt;br /&gt;
	local aucun = tonumber( data.aucun )&lt;br /&gt;
	if aucun and annee &amp;lt;= aucun then&lt;br /&gt;
		-- si la l'année est dans la partie 'aucun' on teste s'il y a malgré tout un lien isolé&lt;br /&gt;
		if type( data.seul ) == 'table' then&lt;br /&gt;
			for i, v in ipairs( data.seul ) do&lt;br /&gt;
				if seul == v or seul == tonumber( v ) then&lt;br /&gt;
					return lien&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- partie aucun et pas de lien =&amp;gt; nil&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type( data.tous ) == 'table' then&lt;br /&gt;
		local tous1, tous2 = tonumber( data.tous[1] ), tonumber( data.tous[2] )&lt;br /&gt;
		if tous1 and tous2 and annee &amp;gt;= tous1 and annee &amp;lt;= tous2 then&lt;br /&gt;
			-- l'année est dans la partie 'tous' donc on retourne le lien&lt;br /&gt;
			return lien&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- l'annee n'est ni dans la partie aucun, ni dans la partie tous donc il faut tester si la page existe.&lt;br /&gt;
	cibleLien = mw.title.new( lien )&lt;br /&gt;
	if cibleLien and cibleLien.exists then&lt;br /&gt;
		return lien&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- émule le modèle {{m|Date}}.&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
--		1 : jour (numéro ou &amp;quot;1er&amp;quot;). optionnel, si absent pas de jour&lt;br /&gt;
--		2 : mois (en toutes lettres)&lt;br /&gt;
--		3 : année (nombre)&lt;br /&gt;
--		4 : optionnel, spécialité de l'année&lt;br /&gt;
--		Comportement spécial (&amp;quot;truc à deux balles au lieu d'utiliser un&lt;br /&gt;
--		paramètre nommé du genre &amp;quot;sans année=oui&amp;quot;...&amp;quot;) : si 1 est vide&lt;br /&gt;
--		mais que le reste est complet → on n'affiche pas l'année&lt;br /&gt;
function fun.modeleDate( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	&lt;br /&gt;
	-- chargement de la base de donnée répertoriant certaines pages existant ou n'existant pas pour éviter les &amp;quot;ifexist&amp;quot;.&lt;br /&gt;
	local dataLiens&lt;br /&gt;
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )&lt;br /&gt;
	if success then&lt;br /&gt;
		dataLiens = resultat&lt;br /&gt;
	else&lt;br /&gt;
		-- protection au cas ou le sous module serait mal modifié&lt;br /&gt;
		dataLiens = { [''] = { mois = { aucun = 1000, tous = { 1938, 2013 } }, } }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local annee, mois, numMois, jour&lt;br /&gt;
	local decalage = 0&lt;br /&gt;
	-- si pas de jour mais que args[2] est un mois on décale tout et on&lt;br /&gt;
	-- n'affiche pas l'année&lt;br /&gt;
	if trim( args[1] ) == nil and fun.valideMois( trim( args[3] ) ) ~= nil then&lt;br /&gt;
		decalage = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite l'année&lt;br /&gt;
	local bannee = args[3 + decalage]&lt;br /&gt;
	if Outils.notEmpty( bannee ) then&lt;br /&gt;
		annee = tonumber( bannee )&lt;br /&gt;
		if annee == nil and type( bannee ) == 'string'  then&lt;br /&gt;
			-- test si l'année contient av. J.-C.&lt;br /&gt;
			annee = mw.ustring.match( mw.ustring.upper( bannee ), '^(%d+)%sAV%.?%s?J%.?%-?C' )&lt;br /&gt;
			annee = tonumber( annee )&lt;br /&gt;
			if annee then&lt;br /&gt;
				annee = 0 - annee&lt;br /&gt;
			else&lt;br /&gt;
				local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
				if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
					return Outils.erreur( 'Année invalide (' .. bannee .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|A]]')&lt;br /&gt;
				else&lt;br /&gt;
					return Outils.erreur( 'Année invalide (' .. bannee .. ')')&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		annee = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le mois&lt;br /&gt;
	local bmois = args[2 + decalage]&lt;br /&gt;
	if Outils.notEmpty( bmois ) then&lt;br /&gt;
		mois, numMois = fun.valideMois( bmois )&lt;br /&gt;
		if mois == nil then&lt;br /&gt;
			-- on teste si le mois est fourni sous forme numérique&lt;br /&gt;
			numMois = tonumber( bmois )&lt;br /&gt;
			mois = fun.nomDuMois( numMois )&lt;br /&gt;
		end&lt;br /&gt;
		if mois == nil then&lt;br /&gt;
			local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
			if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
				return Outils.erreur( 'Mois invalide (' .. bmois .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|M]]')&lt;br /&gt;
			else&lt;br /&gt;
				return Outils.erreur( 'Mois invalide (' .. bmois .. ')')&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
		&lt;br /&gt;
			-- on traite le jour si présent&lt;br /&gt;
			local bjour = args[1 + decalage]&lt;br /&gt;
			if Outils.notEmpty( bjour ) then&lt;br /&gt;
				jour = tonumber( bjour )&lt;br /&gt;
				if jour == nil and type( bjour ) == 'string' then&lt;br /&gt;
					bjour = mw.text.trim( bjour )&lt;br /&gt;
					if bjour == '1er'&lt;br /&gt;
						or bjour == '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;Premier&amp;quot; &amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;' -- correspond à {{1er}}&lt;br /&gt;
					then&lt;br /&gt;
						jour = 1&lt;br /&gt;
					else&lt;br /&gt;
						local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
						if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
							return Outils.erreur( 'Jour invalide (' .. bjour .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|J]]')&lt;br /&gt;
						else&lt;br /&gt;
							return Outils.erreur( 'Jour invalide (' .. bjour .. ')')&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				-- on valide que le jour est correct&lt;br /&gt;
				if jour &amp;lt; 1 or jour &amp;gt; 31 then&lt;br /&gt;
					return Outils.erreur( 'Jour invalide (' .. bjour .. ')' )&lt;br /&gt;
				elseif jour &amp;gt; liste_mois[numMois].nJour then&lt;br /&gt;
					local namespaceCategorisation = { [0] = true, [4] = true, [10] = true, [14] = true, [100] = true }&lt;br /&gt;
					if namespaceCategorisation[ mw.title.getCurrentTitle().namespace ] then&lt;br /&gt;
						return Outils.erreur( 'Jour invalide (' .. bjour .. ')[[Catégorie:Page utilisant le modèle date avec une syntaxe erronée|J]]')&lt;br /&gt;
					else&lt;br /&gt;
						return Outils.erreur( 'Jour invalide (' .. bjour .. ')')&lt;br /&gt;
					end&lt;br /&gt;
					-- l'année bisextile n'est pas testée pour accepter les dates juliennes.&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- S'il n'y a pas de jour on regarde si la première lettre du mois est en majuscule&lt;br /&gt;
				if mw.ustring.match( bmois, '^%u' ) then&lt;br /&gt;
					-- oui, on passe la première lettre en majuscule&lt;br /&gt;
					mois = ucfirst( mois )&lt;br /&gt;
				end&lt;br /&gt;
				-- s'il n'y a pas d'année non plus on retourne le mois simple&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	-- else&lt;br /&gt;
	--	return Outils.erreur(&amp;quot;Le mois est obligatoire&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le champs optionnel&lt;br /&gt;
	local qualificatif = trim( args[4 + decalage] ) or args.qualificatif&lt;br /&gt;
	&lt;br /&gt;
	-- on traite l'age, naissance et mort&lt;br /&gt;
	local age = trim( args['âge'] or args['age'] )&lt;br /&gt;
	age = age and  fun.age( annee, numMois, jour )&lt;br /&gt;
	local naissance = trim( args.naissance )&lt;br /&gt;
	local mort = trim( args.mort )&lt;br /&gt;
	&lt;br /&gt;
	-- on traite le calendrier&lt;br /&gt;
	local gannee, gmois, gjour = annee, numMois, jour        -- date suivant le calendrier grégorien pour &amp;lt;time&amp;gt;&lt;br /&gt;
	local jannee, jmois, jjour, julien = annee, mois, jour   -- servira éventuellement à a affiché la date selon le calendrier julien&lt;br /&gt;
	local julien2, julien3 = nil, nil                        -- servira éventuellement à a affiché des parenthèses&lt;br /&gt;
	local julien = trim( string.lower( args.julien or '' ) )&lt;br /&gt;
	if annee and jour then&lt;br /&gt;
		local amj = annee * 10000 + numMois * 100 + jour&lt;br /&gt;
		if amj &amp;lt; 15821014 then&lt;br /&gt;
			gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )&lt;br /&gt;
		elseif julien == 'oui' then&lt;br /&gt;
			gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )&lt;br /&gt;
			annee, mois, jour = gannee, liste_mois[gmois][1], gjour&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	-- on génère le résultat&lt;br /&gt;
	&lt;br /&gt;
	-- Déclarations des variables&lt;br /&gt;
	local wikiListe = TableBuilder.new()   -- reçois le texte affiché pour chaque paramètre&lt;br /&gt;
	local iso = TableBuilder.new()         -- reçois le format date ISO de ce paramètre&lt;br /&gt;
	&lt;br /&gt;
	local dataQualificatif = dataLiens[qualificatif or '']&lt;br /&gt;
	if type( dataQualificatif ) ~= 'table' then&lt;br /&gt;
		-- si le qualifiquatif n'est pas dans la base de donnée, on crée une table minimum,&lt;br /&gt;
		-- qui imposera un test sur l'annee, mais considère qu'il n'y a pas de lien sur le jour ou le mois&lt;br /&gt;
		dataQualificatif = { qualificatif = ' ' .. qualificatif, annee = { } }&lt;br /&gt;
	end&lt;br /&gt;
	local dataCat = dataLiens[dataQualificatif.cat]&lt;br /&gt;
	if type( dataCat ) ~= 'table' or dataCat == dataQualificatif then&lt;br /&gt;
		dataCat = { qualificatif = '' }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Date julienne&lt;br /&gt;
	if jjour ~= jour then&lt;br /&gt;
		if jjour == 1 then&lt;br /&gt;
			jjour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
		end&lt;br /&gt;
		if jannee ~= annee then&lt;br /&gt;
			julien3 = '(&amp;lt;abbr class=abbr title=&amp;quot;selon le calendrier julien&amp;quot;&amp;gt;' .. jjour .. '&amp;amp;nbsp;' .. jmois .. '&amp;amp;nbsp;' .. jannee .. '&amp;lt;/abbr&amp;gt;)'&lt;br /&gt;
		else&lt;br /&gt;
			julien2 = '(&amp;lt;abbr class=abbr title=&amp;quot;selon le calendrier julien&amp;quot;&amp;gt;' .. jjour .. '&amp;amp;nbsp;' .. jmois .. '&amp;lt;/abbr&amp;gt;)'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	-- le jour si présent&lt;br /&gt;
	local qualifJour = ''&lt;br /&gt;
	if jour then&lt;br /&gt;
		-- éphémérides du qualificatif, ou de sa catégorie, ou générale.&lt;br /&gt;
		qualifJour = dataQualificatif.jour and dataQualificatif.qualificatif&lt;br /&gt;
			or dataCat.jour and dataCat.qualificatif&lt;br /&gt;
			or ''&lt;br /&gt;
		local lien = jour .. ' ' .. mois .. ' ' .. qualifJour&lt;br /&gt;
		if jour == 1 then&lt;br /&gt;
			jour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
			lien = '1er ' .. mois .. ' ' .. qualifJour&lt;br /&gt;
		end&lt;br /&gt;
		-- s'il n'y a pas de lien sur le mois, il sera affiché avec le jour.&lt;br /&gt;
		wikiListe.insert( '[[' .. lien .. '|' .. jour .. ']]' )&lt;br /&gt;
		wikiListe.insert( '[[' .. lien .. '|' .. jour .. '&amp;amp;nbsp;'.. mois .. ']]' )&lt;br /&gt;
		iso.insert( 1, string.sub( '0' .. gjour, -2 ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- le mois&lt;br /&gt;
	if mois then&lt;br /&gt;
		local lien&lt;br /&gt;
		if annee then&lt;br /&gt;
			lien = existDate( dataQualificatif, annee, mois ) or existDate( dataCat, annee, mois )&lt;br /&gt;
			if lien == nil and qualificatif and qualifJour == '' then&lt;br /&gt;
				-- test nouveau test sans le qualificatif uniquement s'il n'y a pas d'éphémérides pour ce qualificatif.&lt;br /&gt;
				lien = existDate( dataLiens[''], annee, mois )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if lien then&lt;br /&gt;
			-- s'il y a un lien on retire le lien affichant 'jour mois' pour ajouter '[[mois annee|mois']]&lt;br /&gt;
			wikiListe.remove()&lt;br /&gt;
			wikiListe.insert(  '[[' .. lien .. '|' .. mois .. ']]' )&lt;br /&gt;
		else&lt;br /&gt;
			-- sinon on retire le lien affichant 'jour' pour ne garder que le lien 'jour mois'&lt;br /&gt;
			wikiListe.remove( #wikiListe - 1 )&lt;br /&gt;
			-- s'il n'y avait pas je jour, la liste est vide mais ça ne pose pas de problème&lt;br /&gt;
			-- sauf si l'année n'est pas affichée :&lt;br /&gt;
			if #wikiListe == 0 and ( annee == nil or decalage &amp;gt; 0 ) then&lt;br /&gt;
				return mois&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		iso.insert( 1, string.sub( '0' .. gmois, -2 ) )&lt;br /&gt;
	end&lt;br /&gt;
	if( julien2 ) then&lt;br /&gt;
		wikiListe.insert( julien2 )&lt;br /&gt;
	end&lt;br /&gt;
	-- l'année&lt;br /&gt;
	if annee and decalage == 0 then -- seulement si on doit l'affichée&lt;br /&gt;
		local lien = existDate( dataQualificatif, annee ) or existDate( dataCat, annee )&lt;br /&gt;
		local texte = annee&lt;br /&gt;
		if annee &amp;lt; 0 then&lt;br /&gt;
			local annneeAvJc = 0 - annee&lt;br /&gt;
			lien = lien or ( annneeAvJc .. ' av. J.-C.' )&lt;br /&gt;
			local avJC = trim( string.lower( args.avJC or '' ) )&lt;br /&gt;
			if args.avJC == 'non' then&lt;br /&gt;
				texte = annneeAvJc&lt;br /&gt;
			else&lt;br /&gt;
				texte = annneeAvJc .. '&amp;amp;nbsp;&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;'&lt;br /&gt;
					.. annneeAvJc .. ' avant Jésus-Christ&amp;quot;&amp;gt;av.&amp;amp;nbsp;J.-C.&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
			end&lt;br /&gt;
			iso.insert( 1, tostring( annneeAvJc - 10000 ) )   -- ! avant JC, ce n'est pas une date iso ! Pour un tri correct sur wiki.&lt;br /&gt;
		else&lt;br /&gt;
			iso.insert( 1, string.sub( '000' .. annee , -4 ) )&lt;br /&gt;
		end&lt;br /&gt;
		lien = lien or annee&lt;br /&gt;
		if mois and #wikiListe == 0 then&lt;br /&gt;
			-- si le mois n'a pas de lien et n'est pas affiché avec le jour, il est affiché avec l'année.&lt;br /&gt;
			texte = mois .. '&amp;amp;nbsp;' .. texte&lt;br /&gt;
		end&lt;br /&gt;
		wikiListe.insert(  '[[' .. lien .. '|' .. texte .. ']]' )&lt;br /&gt;
	end&lt;br /&gt;
	if( julien3 ) then&lt;br /&gt;
		wikiListe.insert( julien3 )&lt;br /&gt;
	end&lt;br /&gt;
	-- l'age&lt;br /&gt;
	if type( age ) == 'number' and age &amp;gt;= 0 then&lt;br /&gt;
		if age == 0 then&lt;br /&gt;
			age = '(moins d\'un&amp;amp;nbsp;an)'&lt;br /&gt;
		elseif age == 1 then&lt;br /&gt;
			age = '(1&amp;amp;nbsp;an)'&lt;br /&gt;
		else&lt;br /&gt;
			age = '(' .. age .. '&amp;amp;nbsp;ans)'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- compilation du résultat&lt;br /&gt;
	local wikiTexte = wikiListe.concat( '&amp;amp;nbsp;' )&lt;br /&gt;
	local isoTexte = iso.concat( '-' )&lt;br /&gt;
	&lt;br /&gt;
	-- On ajoute un peu de sémantique.&lt;br /&gt;
	local wikiHtml = mw.html.create( '' )&lt;br /&gt;
	&lt;br /&gt;
	local dateHtml = wikiHtml:tag( 'span' )&lt;br /&gt;
			:addClass( 'date-lien' )&lt;br /&gt;
			:addClass( 'datasortkey' )&lt;br /&gt;
			:attr( 'data-sort-value', isoTexte )&lt;br /&gt;
			:wikitext( wikiTexte )&lt;br /&gt;
	if naissance then &lt;br /&gt;
		dateHtml:addClass( 'bday' )&lt;br /&gt;
	elseif mort then&lt;br /&gt;
		dateHtml:addClass( 'dday' )&lt;br /&gt;
	end&lt;br /&gt;
	if age then&lt;br /&gt;
		wikiHtml:wikitext( ' ' )&lt;br /&gt;
				:tag( 'span' )&lt;br /&gt;
					:addClass( 'noprint')&lt;br /&gt;
					:wikitext( age )&lt;br /&gt;
					:done()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( wikiHtml )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- voir émule le modèle:Inscription date&lt;br /&gt;
-- la détection des arguments permet d'utilisé la fonction depuis un modèle, depuis invoke, ou depuis une autre fonction.&lt;br /&gt;
-- pour facilité l'écriture de lua, annee (sans accent) est accepté lors de l'appel depuis lua.&lt;br /&gt;
function fun.inscriptionDate( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	local annee = Outils.notEmpty( args['année'], args.annee, args.year )&lt;br /&gt;
	if annee then&lt;br /&gt;
		-- si l'année est renseigné, on essaye de trouver le mois&lt;br /&gt;
		local mois = Outils.notEmpty( args.mois, args.month )&lt;br /&gt;
		&lt;br /&gt;
		if mois then&lt;br /&gt;
			mois = fun.determinationMois( mois, frame ) or mois&lt;br /&gt;
			local jour = Outils.notEmpty( args.jour, args.day, args['quantième'] )&lt;br /&gt;
			if jour then&lt;br /&gt;
				-- si le mois est valide on détermine le jour&lt;br /&gt;
				jour = tonumber( jour ) or jour    -- suppresion des 0 qui trainent&lt;br /&gt;
				if jour == 1 or jour == '1er' then&lt;br /&gt;
					jour = '&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;Premier&amp;quot;&amp;gt;1&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;lt;/abbr&amp;gt;'&lt;br /&gt;
				end&lt;br /&gt;
				return jour .. '&amp;amp;nbsp;' .. mois .. '&amp;amp;nbsp;' .. annee&lt;br /&gt;
			else&lt;br /&gt;
				return mois .. '&amp;amp;nbsp;' .. annee&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return annee&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- si annee n'est pas précisé, on utilise la paramètre date&lt;br /&gt;
		local date = Outils.validTextArg( args, 'date' )&lt;br /&gt;
		if date then&lt;br /&gt;
			return '&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;' .. date .. '&amp;lt;/span&amp;gt;'&lt;br /&gt;
		else&lt;br /&gt;
			return ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- la fonction dateISO renvoie un date au format aaaa-mm-jj (sans liens)&lt;br /&gt;
-- l'année peut être sous la forme 2013 ou [[2013 en litérature|2013]]&lt;br /&gt;
-- le mois peut être en lettre ou en chiffres&lt;br /&gt;
-- le jour peut être sous la forme '05', '{{1er}}' ou 'vendredi 13'&lt;br /&gt;
function fun.dateISO( frame )&lt;br /&gt;
	local args = Outils.extractArgs( frame )&lt;br /&gt;
	local annee = Outils.notEmpty( args['année'], args.annee, args.year, args.date )&lt;br /&gt;
	-- extraction de l'année&lt;br /&gt;
	if type( annee ) == 'string' then&lt;br /&gt;
		annee = ( tonumber( annee )	-- match '2013'&lt;br /&gt;
				or string.match ( annee, '%D(%d%d%d%d)%D' ) -- match  '[[2013 en musique|2013]]'&lt;br /&gt;
				or string.match ( annee, '%D(%d%d%d%d)$' )  -- match '17 septembre 2013'&lt;br /&gt;
				or string.match ( annee, '^(%d%d%d%d)%D' )  -- match '2013-09-17'&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	annee = tonumber( annee )&lt;br /&gt;
	&lt;br /&gt;
	-- le format de date iso est défini suivant le calendrier grégorien.&lt;br /&gt;
	-- Avant l'année 1583 la date est calendrier est probablement du calendrier julien,&lt;br /&gt;
	-- donc autant s'abstenir.&lt;br /&gt;
	if annee and annee &amp;gt; 1582  then&lt;br /&gt;
		local mois = Outils.notEmpty( args.mois, args.month )&lt;br /&gt;
		-- num mois trouve le numéro du mois, qu'il soit numérique ou texte, complet ou abrégé.&lt;br /&gt;
		local nomMois, numMois = fun.determinationMois( mois )&lt;br /&gt;
		if numMois then&lt;br /&gt;
			mois = '-' .. string.sub( '0' .. numMois, -2 )&lt;br /&gt;
			&lt;br /&gt;
			local jour = Outils.notEmpty( args.jour, args.day, args['quantième'] )&lt;br /&gt;
			if type( jour ) == 'string' then&lt;br /&gt;
				jour = tonumber( jour ) or tonumber( string.match ( jour, '%d+') )&lt;br /&gt;
			end&lt;br /&gt;
			jour = tonumber( jour )&lt;br /&gt;
			if jour and jour &amp;lt;= liste_mois[numMois].nJour then&lt;br /&gt;
				jour = '-' .. string.sub( '0' .. jour, -2 )&lt;br /&gt;
				return annee .. mois .. jour&lt;br /&gt;
			else&lt;br /&gt;
				return annee .. mois&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return tostring( annee )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Rang du jour dans l'année&lt;br /&gt;
-- Usage : do_dayRank{année,mois,jour}&lt;br /&gt;
function fun.do_dayRank(arguments)&lt;br /&gt;
	local yr = tonumber(arguments.year or arguments[1]) or 1&lt;br /&gt;
	local mt = tonumber(arguments.month or arguments[2]) or 1&lt;br /&gt;
	local dy = tonumber(arguments.day or arguments[3]) or 1&lt;br /&gt;
	-- Rangs des premiers des mois&lt;br /&gt;
	local ranks = {0,31,59,90,120,151,181,212,243,273,304,334}&lt;br /&gt;
	&lt;br /&gt;
	local rank = (ranks[mt] or 0) + dy - 1&lt;br /&gt;
	if(fun.isLeapYear(yr) and (mt &amp;gt;= 3)) then&lt;br /&gt;
		rank = rank+1&lt;br /&gt;
	end&lt;br /&gt;
	return rank&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Nombre de jours entre deux années (du 1er janvier au 1er janvier)&lt;br /&gt;
-- Suit le calendrier grégorien&lt;br /&gt;
function fun.do_daysBetween(arguments)&lt;br /&gt;
	local yr1 = tonumber(arguments[1]) or 0&lt;br /&gt;
	local yr2 = tonumber(arguments[2]) or 0&lt;br /&gt;
	&lt;br /&gt;
	return fun.daysSinceOrigin(yr2) - fun.daysSinceOrigin(yr1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Nombre de jours depuis l'année 1 (du 1er janvier au 1er janvier)&lt;br /&gt;
function fun.daysSinceOrigin(year)&lt;br /&gt;
	local yr = year-1&lt;br /&gt;
	return 365*yr + math.floor(yr/4) - math.floor(yr/100) + math.floor(yr/400)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Test d'année bissextile (Suit le calendrier grégorien)&lt;br /&gt;
function fun.isLeapYear(year)&lt;br /&gt;
	local yr = tonumber(year) or 1&lt;br /&gt;
	return (yr%4 == 0) and ((yr%100 ~= 0) or (yr%400 == 0))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Conversion d'un nombre en chiffres romains&lt;br /&gt;
function fun.toRoman(number)&lt;br /&gt;
	local n = math.floor(number)&lt;br /&gt;
	local letters = {&amp;quot;I&amp;quot;,&amp;quot;V&amp;quot;,&amp;quot;X&amp;quot;,&amp;quot;L&amp;quot;,&amp;quot;C&amp;quot;,&amp;quot;D&amp;quot;,&amp;quot;M&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;}&lt;br /&gt;
	local pattern = {&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;,&amp;quot;00&amp;quot;,&amp;quot;000&amp;quot;,&amp;quot;01&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;10&amp;quot;,&amp;quot;100&amp;quot;,&amp;quot;1000&amp;quot;,&amp;quot;02&amp;quot;}&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	if(n&amp;lt;=0 or n&amp;gt;=4000) then&lt;br /&gt;
		result = &amp;quot;---&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		for i=1,7,2 do&lt;br /&gt;
			p = pattern[n%10 + 1]&lt;br /&gt;
			for j=0,2 do&lt;br /&gt;
				p = string.gsub(p,tostring(j),letters[i+j])&lt;br /&gt;
			end&lt;br /&gt;
			result = p .. result&lt;br /&gt;
			n = math.floor(n/10)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Conversion et affichage d'une date dans le calendrier républicain&lt;br /&gt;
function fun.dateRepublicain(frame)&lt;br /&gt;
	local pframe = frame:getParent()&lt;br /&gt;
	local arguments = pframe.args&lt;br /&gt;
	return fun.formatRepCal(fun.do_toRepCal(arguments))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Calcul d'une date dans le calendrier républicain&lt;br /&gt;
-- On suppose que les années 4n+3 sont sextiles (3, 7, 11...)&lt;br /&gt;
function fun.do_toRepCal(arguments)&lt;br /&gt;
	local yr = tonumber(arguments.year or arguments[1]) or 2000&lt;br /&gt;
	-- rang absolu du jour demandé, le jour 0 étant le 22 septembre 1792 (1er jour de l'an I)&lt;br /&gt;
	local repDays = fun.do_dayRank(arguments) + fun.do_daysBetween{1792,yr} - fun.do_dayRank{1792,9,22}&lt;br /&gt;
	local repYear = math.floor((repDays+731)/365.25) - 1&lt;br /&gt;
	local repDayRank = repDays - 365*(repYear-1) - math.floor(repYear/4)&lt;br /&gt;
	local repMonth, repDay = math.floor(repDayRank/30)+1, (repDayRank%30)+1&lt;br /&gt;
	return {repYear, repMonth, repDay}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Formatage d'une date selon le calendrier républicain&lt;br /&gt;
-- Usage : fun.formatRepCal{année,mois,jour}&lt;br /&gt;
function fun.formatRepCal(arguments)&lt;br /&gt;
	local months = {&amp;quot;Vendémiaire&amp;quot;,&amp;quot;Brumaire&amp;quot;,&amp;quot;Frimaire&amp;quot;,&amp;quot;Nivôse&amp;quot;,&amp;quot;Pluviôse&amp;quot;,&amp;quot;Ventôse&amp;quot;,&amp;quot;Germinal&amp;quot;,&amp;quot;Floréal&amp;quot;,&amp;quot;Prairial&amp;quot;,&amp;quot;Messidor&amp;quot;,&amp;quot;Thermidor&amp;quot;,&amp;quot;Fructidor&amp;quot;}&lt;br /&gt;
	local extras = {&amp;quot;de la vertu&amp;quot;,&amp;quot;du génie&amp;quot;,&amp;quot;du travail&amp;quot;,&amp;quot;des récompenses&amp;quot;,&amp;quot;de l'opinion&amp;quot;,&amp;quot;de la révolution&amp;quot;}&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	if(arguments[2] &amp;lt; 13) then&lt;br /&gt;
		result = result .. tostring(arguments[3]) .. &amp;quot;&amp;amp;nbsp;&amp;quot; .. months[arguments[2]]&lt;br /&gt;
	else&lt;br /&gt;
		result = result .. &amp;quot;jour &amp;quot; .. extras[arguments[3]]&lt;br /&gt;
	end&lt;br /&gt;
	result = result .. &amp;quot; de l'an &amp;quot; .. fun.toRoman(arguments[1])&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- Voir Modèle:Âge&lt;br /&gt;
-- retourne l'age en fonction de la ou les dates fournies. La valeur retounée est de type 'number'&lt;br /&gt;
-- Parammètres :&lt;br /&gt;
-- 1, 2, 3 : année, mois jour de naissance (supposé dans le calendrier grégorien)&lt;br /&gt;
-- 4, 5, 6 : année, mois, joue du calcul (facultatif, par défaut la date UTC courante).&lt;br /&gt;
function fun.age( an, mn, jn, ac, mc, jc )&lt;br /&gt;
	local an = tonumber( an )&lt;br /&gt;
	if an == nil then&lt;br /&gt;
		-- pas de message d'erreur qui risque de faire planter la fonction appelante&lt;br /&gt;
		-- à elle de gérer ce retour.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	-- les jours et mois sont par défaut égal à 1, pour pouvoir calculer un age même si la date est incompète.&lt;br /&gt;
	local mn = tonumber( mn ) or 1&lt;br /&gt;
	local jn = tonumber( jn ) or 1&lt;br /&gt;
	&lt;br /&gt;
	local today = os.date( '!*t' )&lt;br /&gt;
	local ac = tonumber( ac ) or today.year&lt;br /&gt;
	local mc = tonumber( mc ) or today.month&lt;br /&gt;
	local jc = tonumber( jc ) or today.day&lt;br /&gt;
	&lt;br /&gt;
	local age = ac - an&lt;br /&gt;
	if mc &amp;lt; mn or ( mc == mn and jc &amp;lt; jn ) then&lt;br /&gt;
		age = age - 1&lt;br /&gt;
	end&lt;br /&gt;
	return age&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fun.modeleAge( frame )&lt;br /&gt;
	args = frame.getParent().args&lt;br /&gt;
	local annee = args[1] or args['année']&lt;br /&gt;
	if annee == nil then&lt;br /&gt;
		return Outils.erreur( &amp;quot;Il faut au minimum l'année pour calculer un âge&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	local age = fun.age (&lt;br /&gt;
		args[1] or args['année'],&lt;br /&gt;
		args[2] or args['mois'],&lt;br /&gt;
		args[3] or args['jour'],&lt;br /&gt;
		args[4],&lt;br /&gt;
		args[5],&lt;br /&gt;
		args[6]&lt;br /&gt;
	)&lt;br /&gt;
	if age then&lt;br /&gt;
		return age&lt;br /&gt;
	else&lt;br /&gt;
		return Outils.erreur(&amp;quot;les paramètres doivent être des chiffres&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul du jour julien à partir d'une date du calendrier grégorien&lt;br /&gt;
function fun.julianDay( year, month, day, hour, min, sec )&lt;br /&gt;
	local julian&lt;br /&gt;
	julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )&lt;br /&gt;
			- math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 100 )&lt;br /&gt;
			+ math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 400 )&lt;br /&gt;
			+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )&lt;br /&gt;
			+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400&lt;br /&gt;
			- 32167.5&lt;br /&gt;
	return julian&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul du jour julien à partir d'une date du calendrier julier&lt;br /&gt;
function fun.julianDayJulian( year, month, day, hour, min, sec )&lt;br /&gt;
	local julian&lt;br /&gt;
	julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )&lt;br /&gt;
			+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )&lt;br /&gt;
			+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400&lt;br /&gt;
			- 32205.5&lt;br /&gt;
	return julian&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier grégorien à partir du jour julien&lt;br /&gt;
function fun.julianDayToGregorian( julianDay )&lt;br /&gt;
	local base = math.floor( julianDay + 32044.5 )  -- 1 March -4800 (proleptic Gregorian date)&lt;br /&gt;
	local nCentury = math.floor( ( base * 4 + 3 ) / 146097 )&lt;br /&gt;
	local sinceCentury = base - math.floor( nCentury * 146097 / 4 )&lt;br /&gt;
	local nYear = math.floor( ( sinceCentury * 4 + 3 ) / 1461 )&lt;br /&gt;
	local sinceYear = sinceCentury - math.floor( nYear * 1461 / 4 )&lt;br /&gt;
	local nMonth = math.floor( ( sinceYear * 5 + 2 ) / 153 )&lt;br /&gt;
	&lt;br /&gt;
	local day = sinceYear - math.floor( (  nMonth  * 153 + 2 ) / 5 ) + 1&lt;br /&gt;
	local month = nMonth  - math.floor(  nMonth  / 10 ) * 12 + 3&lt;br /&gt;
	local year = math.floor( sinceYear / 306 ) + nYear + 100 * nCentury - 4800&lt;br /&gt;
	&lt;br /&gt;
	return year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier julien à partir du jour julien&lt;br /&gt;
-- calcul basé sur l'algorythme de la page fr.wikipedia.org/wiki/Jour_julien (1/10/2013)&lt;br /&gt;
function fun.julianDayToJulian( julianDay )&lt;br /&gt;
	local year = math.modf( ( julianDay * 4 - 6884469 ) / 1461 )&lt;br /&gt;
	local r2 = julianDay - math.modf( ( 1461 * year + 6884472 ) / 4 )&lt;br /&gt;
	local month = math.modf( ( 5 * r2 + 461 ) / 153 )&lt;br /&gt;
	local day = r2 - math.modf( ( 153 * month - 457 ) / 5 ) + 1&lt;br /&gt;
	if month &amp;gt; 12 then&lt;br /&gt;
		year = year + 1&lt;br /&gt;
		month = month - 12&lt;br /&gt;
	end&lt;br /&gt;
	return year, month, day&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier grégorien à partir d'une date dans le calendrier julien&lt;br /&gt;
function fun.julianToGregorian( year, month, day )&lt;br /&gt;
	return fun.julianDayToGregorian( fun.julianDayJulian( year, month, day ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- calcul d'une date dans le calendrier julien à partir d'une date dans le calendrier grégorien&lt;br /&gt;
function fun.gregorianToJulian( year, month, day )&lt;br /&gt;
	year = tonumber(year)&lt;br /&gt;
	if month then month = tonumber(month) else month = 6 end --prend une valeur centrale pour donner un best &amp;quot;guess&amp;quot;&lt;br /&gt;
	if day then day = tonumber(day) else day = 15 end&lt;br /&gt;
	return fun.julianDayToJulian( fun.julianDay( year, month, day ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- erreurModuleData affiche  d'un message d'erreur si le Module:Langue/Data n'a pas été chargé correctement,&lt;br /&gt;
-- pour la page de discussion de la base de donnée et ceux qui veulent surveiller cette page.&lt;br /&gt;
function fun.erreurModuleData()&lt;br /&gt;
	local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )&lt;br /&gt;
	if success == false then&lt;br /&gt;
		local message = [[&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Le chargement du module Date/Data génère une erreur : &amp;lt;/strong&amp;gt;&amp;lt;br /&amp;gt;%s&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Cette erreur doit être corrigée au plus vite car des milliers de page ne s'affichent pas correctement&amp;lt;/span&amp;gt;&lt;br /&gt;
]]&lt;br /&gt;
		return string.format( message, resultat )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
-- checkDataCat génère des liens vers les pages annuelles, mensuelles et d'éphémérides liè aux&lt;br /&gt;
-- catégories du Module:Date/Data. La date la plus ancienne dépend de 'aucun' et 'seul[1]'&lt;br /&gt;
-- Paramètres :&lt;br /&gt;
-- 	1 : la catégorie. Il y aura une section par qualificatif de cette catégorie.&lt;br /&gt;
-- 	mois : oui pour avoir les liens vers les pages mensuelles et éphémérides (4 jours dans l'année)&lt;br /&gt;
-- 	alias : pour avoir des lien pour les alias en plus des qualificatif&lt;br /&gt;
function fun.checkDataCat( frame )&lt;br /&gt;
	local category = trim(frame.args[1])&lt;br /&gt;
	local monthLinks = frame .args.mois == 'oui'&lt;br /&gt;
	local alias = frame.args.alias == 'oui'&lt;br /&gt;
	local dataLink = mw.loadData( 'Module:Date/Data' )&lt;br /&gt;
	local wikiList =  TableBuilder.new()&lt;br /&gt;
	local currentYear = tonumber( os.date( '%Y' ) )&lt;br /&gt;
	local columns = '&amp;lt;div style=&amp;quot;-moz-column-width:5em;-webkit-column-width:5em;column-width:5em;-moz-column-gap:1em;-webkit-column-gap:1em;column-gap:1em;text-align:left;&amp;quot;&amp;gt;'&lt;br /&gt;
	local newSection&lt;br /&gt;
	if monthLinks then&lt;br /&gt;
		newSection = '\n\n== %s ==\n\n=== Années ===\n' .. columns&lt;br /&gt;
	else&lt;br /&gt;
		newSection ='\n\n== %s ==\n' .. columns&lt;br /&gt;
	end&lt;br /&gt;
	for field, dataField in pairs( dataLink ) do&lt;br /&gt;
		-- boucle sur tous les qualificatif ayant pour catégorie le premier paramère&lt;br /&gt;
		if dataField.cat == category or ( category == 'cat' and dataField.cat == field ) then&lt;br /&gt;
			local monthInitialYear, initialYear&lt;br /&gt;
			-- définition de l'année à partir de laquelle on va tester toutes les année / mois&lt;br /&gt;
			if dataField.qualificatif == field or ( category == 'cat' and dataField.cat == field ) then&lt;br /&gt;
				if dataField.annee and dataField.annee.aucun and dataField.annee.aucun &amp;lt; currentYear then&lt;br /&gt;
					local aucun = ( dataField.annee.seul and dataField.annee.seul[1] ) or dataField.annee.aucun&lt;br /&gt;
					initialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 50 )&lt;br /&gt;
				else&lt;br /&gt;
					initialYear = currentYear - 50&lt;br /&gt;
				end&lt;br /&gt;
				if dataField.mois and tonumber( dataField.mois.aucun ) and ( tonumber( dataField.mois.aucun ) &amp;lt; currentYear ) then&lt;br /&gt;
					local aucun = dataField.mois.aucun&lt;br /&gt;
					monthInitialYear = math.min( aucun - math.ceil( (currentYear - aucun) / 4 ), currentYear - 8 )&lt;br /&gt;
				else&lt;br /&gt;
					monthInitialYear = currentYear - 8&lt;br /&gt;
				end&lt;br /&gt;
			elseif alias then&lt;br /&gt;
				-- si le paramètre alias est défini on teste aussi tous les alias, sinon ils sont ignorés&lt;br /&gt;
				initialYear = currentYear - 50&lt;br /&gt;
				monthInitialYear = currentYear - 8&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- création de l'ensembles des liens&lt;br /&gt;
			if initialYear then&lt;br /&gt;
				-- ajout de lien vers les pages annuelles de l'année en court + 5 jusqu'à initialYear&lt;br /&gt;
				wikiList.insert( string.format( newSection, field ) )&lt;br /&gt;
				local fieldLink = ' ' .. field&lt;br /&gt;
				if category == 'cat' then&lt;br /&gt;
					fieldLink = ' ' .. dataField.qualificatif&lt;br /&gt;
				end&lt;br /&gt;
				for year = ( currentYear + 5 ), initialYear, -1  do&lt;br /&gt;
					wikiList.insert( '\n* [[' .. year .. fieldLink ..'|' .. year .. ']]' )&lt;br /&gt;
				end&lt;br /&gt;
				wikiList.insert( '\n&amp;lt;/div&amp;gt;' )&lt;br /&gt;
				&lt;br /&gt;
				if monthLinks then&lt;br /&gt;
					-- insertstion de liens vers les mois de l'année en court + 1 jusqu'à monthInitialYear&lt;br /&gt;
					wikiList.insert( '\n\n=== Mois ==='  )&lt;br /&gt;
					local month, sep&lt;br /&gt;
					for year = ( currentYear + 1 ), monthInitialYear, -1  do&lt;br /&gt;
						wikiList.insert( '\n* ' .. year .. ' : ' )&lt;br /&gt;
						sep = ' • '&lt;br /&gt;
						for j = 1, 12 do&lt;br /&gt;
							month = ucfirst( liste_mois[j][1] ) .. ' '&lt;br /&gt;
							if j == 12 then sep = ''&lt;br /&gt;
							end&lt;br /&gt;
							wikiList.insert( '[[' .. month .. year .. ' ' .. fieldLink .. '|' .. month .. ']]' .. sep )&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					-- insertion de quelques date pour tester les éphémérides&lt;br /&gt;
					wikiList.insert( '\n\n=== Jours ==='  )&lt;br /&gt;
					wikiList.insert( '\n* [[1er janvier ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[14 mars ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[22 juin ' .. fieldLink .. ']]' )&lt;br /&gt;
					wikiList.insert( '\n* [[3 septembre ' .. fieldLink .. ']]' )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( wikiList )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
  Cette fonction retourne &amp;quot;CET&amp;quot; ou &amp;quot;CEST&amp;quot; selon que dans la pseudo-timezone en cours&lt;br /&gt;
    c'est l'heure d'été ou l'heure d'hiver.&lt;br /&gt;
  Cette fonction n'a de sens a priori que pour des modèles utilisés en Europe&lt;br /&gt;
  &lt;br /&gt;
  Paramètre optionnel non nommé : &amp;quot;sans lien&amp;quot; : retourne le texte CET/CEST. sinon&lt;br /&gt;
    retourne ce même texte avec un wikilien vers les articles correspondant&lt;br /&gt;
--]]&lt;br /&gt;
function fun.CEST(frame)&lt;br /&gt;
	-- option : ne pas créer de wikilien&lt;br /&gt;
	local opt = mw.text.trim(frame.args[1] or frame:getParent().args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
	-- on récupère l'information dans la zone courante&lt;br /&gt;
	local t = mw.getContentLanguage():formatDate(&amp;quot;I&amp;quot;, nil, true)&lt;br /&gt;
	&lt;br /&gt;
	if (t == &amp;quot;1&amp;quot;) then  -- heure d'été&lt;br /&gt;
		if (opt == &amp;quot;sans lien&amp;quot;) then&lt;br /&gt;
			return &amp;quot;CEST&amp;quot;&lt;br /&gt;
		elseif (opt == &amp;quot;décalage&amp;quot;) then&lt;br /&gt;
			return &amp;quot;2&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[Heure d'été d'Europe centrale|CEST]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else  -- heure d'hiver (ou autre zone où ça ne s'applique pas)&lt;br /&gt;
		if (opt == &amp;quot;sans lien&amp;quot;) then&lt;br /&gt;
			return &amp;quot;CET&amp;quot;&lt;br /&gt;
		elseif (opt == &amp;quot;décalage&amp;quot;) then&lt;br /&gt;
			return &amp;quot;1&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[Heure normale d'Europe centrale|CET]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return fun&lt;/div&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=11814&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=11814&amp;oldid=prev"/>
		<updated>2014-05-02T22:06:37Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;a href=&quot;https://baripedia.org/index.php?title=Module:Date&amp;amp;diff=11814&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=8792&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=8792&amp;oldid=prev"/>
		<updated>2014-01-26T18:58:11Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;a href=&quot;https://baripedia.org/index.php?title=Module:Date&amp;amp;diff=8792&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
	<entry>
		<id>https://baripedia.org/index.php?title=Module:Date&amp;diff=7503&amp;oldid=prev</id>
		<title>Arthur : 1 version</title>
		<link rel="alternate" type="text/html" href="https://baripedia.org/index.php?title=Module:Date&amp;diff=7503&amp;oldid=prev"/>
		<updated>2014-01-13T22:01:16Z</updated>

		<summary type="html">&lt;p&gt;1 version&lt;/p&gt;
&lt;a href=&quot;https://baripedia.org/index.php?title=Module:Date&amp;amp;diff=7503&quot;&gt;Voir les modifications&lt;/a&gt;</summary>
		<author><name>Arthur</name></author>
	</entry>
</feed>