<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.culturaitaliana.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate</id>
	<title>Module:Date - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.culturaitaliana.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ADate"/>
	<link rel="alternate" type="text/html" href="https://www.culturaitaliana.org/w/index.php?title=Module:Date&amp;action=history"/>
	<updated>2026-04-09T02:16:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.culturaitaliana.org/w/index.php?title=Module:Date&amp;diff=7531&amp;oldid=prev</id>
		<title>Admin: una versione importata</title>
		<link rel="alternate" type="text/html" href="https://www.culturaitaliana.org/w/index.php?title=Module:Date&amp;diff=7531&amp;oldid=prev"/>
		<updated>2020-11-05T16:52:44Z</updated>

		<summary type="html">&lt;p&gt;una versione importata&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:52, 5 November 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://www.culturaitaliana.org/w/index.php?title=Module:Date&amp;diff=7530&amp;oldid=prev</id>
		<title>en&gt;Candalua at 06:32, 3 August 2020</title>
		<link rel="alternate" type="text/html" href="https://www.culturaitaliana.org/w/index.php?title=Module:Date&amp;diff=7530&amp;oldid=prev"/>
		<updated>2020-08-03T06:32:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--modulo contenente funzioni per la gestione delle date&lt;br /&gt;
local p = {}&lt;br /&gt;
local c = require('Modulo:Common')&lt;br /&gt;
&lt;br /&gt;
--dal value, crea un oggetto date che rappresenta la data, da usare per le successive manipolazioni&lt;br /&gt;
function p.getDate(value)&lt;br /&gt;
	if value and value.time then&lt;br /&gt;
		date = {century, decade, year, month, day, ac = false, precision, calendar}&lt;br /&gt;
		--esempio di data: +1862-08-29T00:00:00Z&lt;br /&gt;
		date.year, date.month, date.day = value.time:match( '.+(%d?%d%d%d%d)%-(%d%d)%-(%d%d).+' )&lt;br /&gt;
		if date.year and date.month and date.day then&lt;br /&gt;
			date.year = tonumber(date.year)&lt;br /&gt;
			date.century = math.ceil(date.year / 100)&lt;br /&gt;
			date.decade = (date.year % 100) - ((date.year % 100) % 10)&lt;br /&gt;
			date.ac = (value.time:sub(1, 1) == '-')&lt;br /&gt;
			date.precision = value.precision&lt;br /&gt;
			date.calendar = p.getCalendar(value)&lt;br /&gt;
			return date&lt;br /&gt;
		else&lt;br /&gt;
			mw.log('Formato data non riconosciuto!')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--fornisce una lista di oggetti date presi dalla property fornita (di default, con ordinamento ASC)&lt;br /&gt;
function p.getDatesFromProperty(property, order)	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	claims = c.sortClaimsByDate(c.getClaimsByProperty(property) or {}, order)&lt;br /&gt;
	for index, claim in pairs(claims) do&lt;br /&gt;
		date = p.getDate(c.getClaimValue(claim))&lt;br /&gt;
		if date then table.insert(list, date) end&lt;br /&gt;
	end&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna la lista di tutte le date per la proprietà indicata, concatenate da &amp;quot;-&amp;quot; o da &amp;quot;tra il e il&amp;quot;&lt;br /&gt;
function p.getAllDates(property)&lt;br /&gt;
	local list = {}		--lista di tutte le date&lt;br /&gt;
 &lt;br /&gt;
	claims = c.getClaimsByProperty(property) or {}&lt;br /&gt;
	for index, claim in pairs(claims) do&lt;br /&gt;
 &lt;br /&gt;
		local val = p.getDate(c.getClaimValue(claim))&lt;br /&gt;
		local preStringa = ''&lt;br /&gt;
 &lt;br /&gt;
		local circa = c.getLabelFromValue(c.getQualifierValueFromClaim(claim, 'P1480'));&lt;br /&gt;
		circa = (circa and circa..' ') or ''&lt;br /&gt;
		local ante = p.getDate(c.getQualifierValueFromClaim(claim, 'P1326'))&lt;br /&gt;
		local post = p.getDate(c.getQualifierValueFromClaim(claim, 'P1319'))&lt;br /&gt;
 &lt;br /&gt;
		if val then&lt;br /&gt;
			preStringa = circa .. p.formatDate(val) .. ', '&lt;br /&gt;
		end&lt;br /&gt;
 &lt;br /&gt;
		if ante and post then&lt;br /&gt;
			--caso &amp;quot;tra il&amp;quot;: ritorniamo direttamente questa coppia di date con la stringa &amp;quot;tra il&amp;quot;&lt;br /&gt;
			return preStringa .. 'tra il ' .. p.formatDate(post) .. ' e il ' .. p.formatDate(ante)&lt;br /&gt;
		elseif ante ~=nil and post == nil then&lt;br /&gt;
			--caso ante&lt;br /&gt;
			table.insert(list, preStringa .. 'prima del ' .. p.formatDate(ante))&lt;br /&gt;
		elseif ante ==nil and post ~= nil then&lt;br /&gt;
			--caso post&lt;br /&gt;
			table.insert(list, preStringa .. 'dopo il ' .. p.formatDate(post))&lt;br /&gt;
		elseif val then&lt;br /&gt;
			--caso normale&lt;br /&gt;
			table.insert(list, circa .. p.formatDate(val))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
	--a questo punto va costruita la stringa finale&lt;br /&gt;
	return c.concat(list, '-')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--trova la &amp;quot;data comune&amp;quot; più accurata possibile tra la lista di date fornita&lt;br /&gt;
function p.getCommonDate(dates)&lt;br /&gt;
	commonDate = {}&lt;br /&gt;
	for k, v in pairs(dates[1] or {}) do commonDate[k] = v end  --deep copy&lt;br /&gt;
		&lt;br /&gt;
	for i, date in pairs(dates or {}) do&lt;br /&gt;
		for k, v in pairs(date) do&lt;br /&gt;
			if v ~= commonDate[k] then commonDate[k] = nil end&lt;br /&gt;
		end&lt;br /&gt;
		if date[precision] and commonDate.precision and date[precision] &amp;lt; commonDate.precision then &lt;br /&gt;
			commonDate.precision = date[precision]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return commonDate&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getAnteOrPostFromProperty(property)&lt;br /&gt;
	claims = c.getClaimsByProperty(property) or {}&lt;br /&gt;
	for index, claim in pairs(claims) do&lt;br /&gt;
		ante = p.getDate(c.getQualifierValueFromClaim(claim, 'P1326'))&lt;br /&gt;
		post = p.getDate(c.getQualifierValueFromClaim(claim, 'P1319'))&lt;br /&gt;
		if ante then &lt;br /&gt;
			return ante&lt;br /&gt;
		elseif post then &lt;br /&gt;
			return post&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.addYears(date, years)&lt;br /&gt;
	local ac = date.ac&lt;br /&gt;
	date.year = date.year * (date.ac and -1 or 1) + years&lt;br /&gt;
	date.ac = not(date.year &amp;gt; 0)&lt;br /&gt;
	date.year = math.abs(date.year)&lt;br /&gt;
	if date.year == 0 then date.ac = not(ac) end&lt;br /&gt;
	if ac ~= date.ac then&lt;br /&gt;
		date.year = date.year + 1 --year 0 does not exist!&lt;br /&gt;
	end&lt;br /&gt;
	date.century = math.ceil(date.year / 100)&lt;br /&gt;
	return date&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna la data formattata a seconda della precisione&lt;br /&gt;
function p.formatDate(date)&lt;br /&gt;
	if date and date.precision then&lt;br /&gt;
		&lt;br /&gt;
		--precision: 7 - century, 8 - decade, 9 - year, 10 - month, 11 - day&lt;br /&gt;
		if date.precision == 7 then&lt;br /&gt;
			return p.formatCentury(date)&lt;br /&gt;
		elseif date.precision == 8 then&lt;br /&gt;
			return p.formatDecadeCentury(date)&lt;br /&gt;
		elseif date.precision == 9 then&lt;br /&gt;
			return p.formatYear(date)&lt;br /&gt;
		elseif date.precision == 10 then&lt;br /&gt;
			return p.formatMonth(date) .. ' ' .. p.formatYear(date)&lt;br /&gt;
		elseif date.precision == 11 then&lt;br /&gt;
			return p.formatDayMonth(date) .. ' ' .. p.formatYear(date)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--il nome secolo nel formato &amp;quot;XII secolo&amp;quot;&lt;br /&gt;
function p.formatCentury(date)&lt;br /&gt;
	if date and date.century then return c.toRoman(date.century) ..' secolo' .. p.avantiCristo(date) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--il nome del decennio nel formato &amp;quot;anni 50&amp;quot;&lt;br /&gt;
function p.formatDecade(date)&lt;br /&gt;
	if date and date.decade then return 'anni ' .. date.decade end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--il nome del decennio nel formato &amp;quot;anni 50 del II secolo a.C.&amp;quot;&lt;br /&gt;
function p.formatDecadeCentury(date)&lt;br /&gt;
	if date and date.decade and date.century then return p.formatDecade(date) .. ' del ' .. p.formatCentury(date) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna l'anno formattato con a.C. se necessario&lt;br /&gt;
function p.formatYear(date)&lt;br /&gt;
	if date and date.year then return date.year .. p.avantiCristo(date) end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna il mese in formato esteso (gennaio, febbraio...)&lt;br /&gt;
function p.formatMonth(date)&lt;br /&gt;
	day = 1 --per dare un giorno &amp;quot;vero&amp;quot; al formatDate (con 0 potrebbe ritornare risultati imprevisti)&lt;br /&gt;
	if date and date.year and date.month then &lt;br /&gt;
		return mw.getLanguage('it'):formatDate('F', date.year..'-'..date.month..'-'..day) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna giorno+mese in formato esteso (1° gennaio, 12 febbraio...)&lt;br /&gt;
function p.formatDayMonth(date)&lt;br /&gt;
	if date and date.year and date.month and date.day then &lt;br /&gt;
		return mw.getLanguage('it'):formatDate('j F',  date.year..'-'..date.month..'-'..date.day):gsub('^1%s', '1° ')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.avantiCristo(date)&lt;br /&gt;
	return (date and date.ac and ' a.C.') or ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna il nome del calendario in testo puro&lt;br /&gt;
function p.getCalendar(value)&lt;br /&gt;
	calendarmodel = ''&lt;br /&gt;
	--TODO capire perché diavolo a volte arriva come string e come sistemare&lt;br /&gt;
	if type(value) == 'string' then&lt;br /&gt;
		calendarmodel = value&lt;br /&gt;
	elseif value and value.calendarmodel then&lt;br /&gt;
		calendarmodel = value.calendarmodel&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then &lt;br /&gt;
		return 'giuliano'&lt;br /&gt;
	elseif calendarmodel == 'http://www.wikidata.org/entity/Q1985727' then &lt;br /&gt;
		return 'gregoriano'&lt;br /&gt;
	else&lt;br /&gt;
		mw.log('Calendario non riconosciuto: ' .. calendarmodel)&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--ritorna una stringa con il tipo di calendario e il link&lt;br /&gt;
function p.linkCalendar(calendar)&lt;br /&gt;
	if p.getCalendar(calendar) == 'giuliano' then&lt;br /&gt;
		return '\'\'[[:w:Calendario giuliano|giul.]]\'\''&lt;br /&gt;
	elseif p.getCalendar(calendar) == 'gregoriano' then&lt;br /&gt;
		return '\'\'[[:w:Calendario gregoriano|greg.]]\'\''&lt;br /&gt;
	else&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--prende una data in formato &amp;quot;1° febbraio&amp;quot; e ritorna &amp;quot;02-01&amp;quot;&lt;br /&gt;
function p.getNumericDate(frame)&lt;br /&gt;
	stringDate = frame.args[1]:gsub(&amp;quot;°&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	day, month = stringDate:match(&amp;quot;(%w+) (%w+)&amp;quot;)&lt;br /&gt;
	day = string.format(&amp;quot;%02d&amp;quot;, day)&lt;br /&gt;
	if     month == 'gennaio'   then return '01-'..day&lt;br /&gt;
	elseif month == 'febbraio'  then return '02-'..day&lt;br /&gt;
	elseif month == 'marzo'     then return '03-'..day&lt;br /&gt;
	elseif month == 'aprile'    then return '04-'..day&lt;br /&gt;
	elseif month == 'maggio'    then return '05-'..day&lt;br /&gt;
	elseif month == 'giugno'    then return '06-'..day&lt;br /&gt;
	elseif month == 'luglio'    then return '07-'..day&lt;br /&gt;
	elseif month == 'agosto'    then return '08-'..day&lt;br /&gt;
	elseif month == 'settembre' then return '09-'..day&lt;br /&gt;
	elseif month == 'ottobre'   then return '10-'..day&lt;br /&gt;
	elseif month == 'novembre'  then return '11-'..day&lt;br /&gt;
	elseif month == 'dicembre'  then return '12-'..day&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--prende una data nel formato 2018.01 (archivio del bar) e ritorna &amp;quot;2018&amp;quot;&lt;br /&gt;
function p.getBarYear(frame)&lt;br /&gt;
	stringDate = frame.args[1]&lt;br /&gt;
	year, mon = stringDate:match(&amp;quot;(%w+).(%w+)&amp;quot;)&lt;br /&gt;
	return year &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--prende una data nel formato 2018.01 (archivio del bar) e ritorna &amp;quot;gennaio&amp;quot;&lt;br /&gt;
function p.getBarMonth(frame)&lt;br /&gt;
	stringDate = frame.args[1]&lt;br /&gt;
	year, mon = stringDate:match(&amp;quot;(%w+).(%w+)&amp;quot;)&lt;br /&gt;
	month = ''&lt;br /&gt;
	if     mon == '01' then month = 'gennaio'&lt;br /&gt;
	elseif mon == '02' then month = 'febbraio'&lt;br /&gt;
	elseif mon == '03' then month = 'marzo'&lt;br /&gt;
	elseif mon == '04' then month = 'aprile'&lt;br /&gt;
	elseif mon == '05' then month = 'maggio'&lt;br /&gt;
	elseif mon == '06' then month = 'giugno'&lt;br /&gt;
	elseif mon == '07' then month = 'luglio'&lt;br /&gt;
	elseif mon == '08' then month = 'agosto'&lt;br /&gt;
	elseif mon == '09' then month = 'settembre'&lt;br /&gt;
	elseif mon == '10' then month = 'ottobre'&lt;br /&gt;
	elseif mon == '11' then month = 'novembre'&lt;br /&gt;
	elseif mon == '12' then month = 'dicembre'&lt;br /&gt;
	end&lt;br /&gt;
	return month&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- prende una data e ritorna il secolo&lt;br /&gt;
function p.secolo(frame)&lt;br /&gt;
	stringDate = frame.args[1]&lt;br /&gt;
	if stringDate:lower():match(&amp;quot;secolo&amp;quot;) then&lt;br /&gt;
		stringDate = stringDate:gsub(&amp;quot;Secolo&amp;quot;, &amp;quot;secolo&amp;quot;):gsub(&amp;quot;a.c.&amp;quot;, &amp;quot;a.C.&amp;quot;)&lt;br /&gt;
		return stringDate&lt;br /&gt;
	else&lt;br /&gt;
		stringDate = stringDate:lower():gsub(&amp;quot;[-/].*&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		str = &amp;quot; secolo&amp;quot;&lt;br /&gt;
		if stringDate:match(&amp;quot;a.c.&amp;quot;) then&lt;br /&gt;
			stringDate = stringDate:gsub(&amp;quot; a.c.&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
			str = str .. &amp;quot; a.C.&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return c.toRoman(math.ceil(stringDate / 100)) .. str&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.absoluteDate(stringDate)&lt;br /&gt;
	if not stringDate then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if stringDate:match(&amp;quot;a.C.&amp;quot;) then&lt;br /&gt;
		stringDate = stringDate:gsub(&amp;quot; a.C.&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
		numDate = tonumber(stringDate)&lt;br /&gt;
		if numDate then&lt;br /&gt;
			return -numDate&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return tonumber(stringDate)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;Candalua</name></author>
	</entry>
</feed>