<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FStibba0%2FDates</id>
	<title>Module:Sandbox/Stibba0/Dates - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FStibba0%2FDates"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Stibba0/Dates&amp;action=history"/>
	<updated>2026-04-21T16:10:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Stibba0/Dates&amp;diff=146229&amp;oldid=prev</id>
		<title>imported&gt;Stibba0: Delete testlist and add/delete some comments</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Stibba0/Dates&amp;diff=146229&amp;oldid=prev"/>
		<updated>2018-12-05T16:43:58Z</updated>

		<summary type="html">&lt;p&gt;Delete testlist and add/delete some comments&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local months = {&lt;br /&gt;
	&amp;quot;January&amp;quot;,&lt;br /&gt;
	&amp;quot;February&amp;quot;,&lt;br /&gt;
	&amp;quot;March&amp;quot;,&lt;br /&gt;
	&amp;quot;April&amp;quot;,&lt;br /&gt;
	&amp;quot;May&amp;quot;,&lt;br /&gt;
	&amp;quot;June&amp;quot;,&lt;br /&gt;
	&amp;quot;July&amp;quot;,&lt;br /&gt;
	&amp;quot;August&amp;quot;,&lt;br /&gt;
	&amp;quot;September&amp;quot;,&lt;br /&gt;
	&amp;quot;October&amp;quot;,&lt;br /&gt;
	&amp;quot;November&amp;quot;,&lt;br /&gt;
	&amp;quot;December&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local allowedFormats = {&lt;br /&gt;
	[&amp;quot;dmy&amp;quot;]=&amp;quot;(%d+) (%a+) (%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;mdy&amp;quot;]=&amp;quot;(%a+) (%d+), (%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;ds&amp;quot;]=&amp;quot;(%d+)%a%a (%a+) (%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;iso&amp;quot;]=&amp;quot;(%d+)-(%d+)-(%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;isoSlash&amp;quot;]=&amp;quot;(%d+)/(%d+)/(%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;my&amp;quot;]=&amp;quot;(%a+) (%d+)&amp;quot;,&lt;br /&gt;
	[&amp;quot;dd&amp;quot;]=&amp;quot;(%d+)%a%a&amp;quot;,&lt;br /&gt;
	[&amp;quot;year&amp;quot;]=&amp;quot;(%d+)&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local formatNames = {&lt;br /&gt;
	[1]=&amp;quot;dmy&amp;quot;,&lt;br /&gt;
	[2]=&amp;quot;mdy&amp;quot;,&lt;br /&gt;
	[3]=&amp;quot;iso&amp;quot;,&lt;br /&gt;
	[4]=&amp;quot;isoSlash&amp;quot;,&lt;br /&gt;
	[5]=&amp;quot;ds&amp;quot;,&lt;br /&gt;
	[6]=&amp;quot;dd&amp;quot;,&lt;br /&gt;
	[7]=&amp;quot;my&amp;quot;,&lt;br /&gt;
	[8]=&amp;quot;year&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local christ = {&lt;br /&gt;
	&amp;quot;BCE&amp;quot;,&lt;br /&gt;
	&amp;quot;AD&amp;quot;,&lt;br /&gt;
	&amp;quot;BC&amp;quot;,&lt;br /&gt;
	&amp;quot;CE&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local circa = {&lt;br /&gt;
	&amp;quot;circa&amp;quot;,&lt;br /&gt;
	&amp;quot;around&amp;quot;,&lt;br /&gt;
	&amp;quot;uncertain&amp;quot;,&lt;br /&gt;
	&amp;quot;sometime&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local glueString = function(one, two, three, between)&lt;br /&gt;
	return one .. between .. two .. between .. three&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local identifyDate = function(dateString)&lt;br /&gt;
	local day, month, year, frmt = nil&lt;br /&gt;
	&lt;br /&gt;
	for index, val in ipairs(months) do&lt;br /&gt;
		-- Checks for months in the string through the first 3 chars of each month&lt;br /&gt;
		if string.match(string.lower(dateString), string.lower(string.sub(months[index], 1, 3))) then&lt;br /&gt;
			month = val	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for _, val in ipairs(formatNames) do&lt;br /&gt;
		-- If there is a pattern in the text it gets whatever data belongs to that.&lt;br /&gt;
		if string.match(dateString, allowedFormats[val]) then&lt;br /&gt;
			datePart = string.sub(dateString, string.find(dateString, allowedFormats[val]))&lt;br /&gt;
			if string.match(datePart, &amp;quot;%a+&amp;quot;) and not (month == nil) then&lt;br /&gt;
				if val == &amp;quot;ds&amp;quot; then&lt;br /&gt;
					frmt = &amp;quot;dmy&amp;quot;&lt;br /&gt;
					datePart = string.gsub(datePart,&amp;quot;%a%a&amp;quot;, &amp;quot;&amp;quot;, 1 )	&lt;br /&gt;
				end&lt;br /&gt;
				if val == &amp;quot;my&amp;quot; then&lt;br /&gt;
					frmt = &amp;quot;my&amp;quot;&lt;br /&gt;
					year = string.match(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
				elseif val == &amp;quot;dd&amp;quot; then&lt;br /&gt;
					frmt = &amp;quot;dmy&amp;quot;&lt;br /&gt;
					day = string.match(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
					datePart = string.gsub(dateString, allowedFormats[val], &amp;quot;&amp;quot;)&lt;br /&gt;
					year = string.match(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					if val == &amp;quot;dmy&amp;quot; then&lt;br /&gt;
						frmt = &amp;quot;dmy&amp;quot;	&lt;br /&gt;
					else&lt;br /&gt;
						frmt = &amp;quot;mdy&amp;quot;&lt;br /&gt;
					end&lt;br /&gt;
					day = string.match(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
					local _, last = string.find(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
					year = string.match(datePart, &amp;quot;%d+&amp;quot;, last+1)&lt;br /&gt;
				end&lt;br /&gt;
				return { [&amp;quot;day&amp;quot;]=day, [&amp;quot;month&amp;quot;]=month, [&amp;quot;year&amp;quot;]=year, [&amp;quot;frmt&amp;quot;]=frmt }&lt;br /&gt;
			else&lt;br /&gt;
				if string.match(dateString, &amp;quot;(%d+) (%a+)&amp;quot;) and not (month == nil) then&lt;br /&gt;
					frmt = &amp;quot;plain&amp;quot;&lt;br /&gt;
					day = string.match(dateString, &amp;quot;(%d+) %a+&amp;quot;)&lt;br /&gt;
				elseif val == &amp;quot;year&amp;quot; then&lt;br /&gt;
					if string.match(dateString, &amp;quot;%a+&amp;quot;) and (not string.match(dateString, &amp;quot;year&amp;quot;)) then&lt;br /&gt;
						for i=1, #circa do&lt;br /&gt;
							if string.match(dateString, circa[i]) or string.match(dateString, christ[i]) then&lt;br /&gt;
								year = string.match(datePart, &amp;quot;%d+&amp;quot;)	&lt;br /&gt;
								frmt = &amp;quot;year&amp;quot;&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					else &lt;br /&gt;
						frmt = &amp;quot;year&amp;quot;&lt;br /&gt;
						year = string.match(datePart, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
						if string.match(dateString, &amp;quot;(%d+) (%d+)&amp;quot;) then&lt;br /&gt;
							if tonumber(year) &amp;lt; tonumber(string.match(dateString, &amp;quot;%d+ (%d+)&amp;quot;)) then&lt;br /&gt;
								year = string.match(dateString, &amp;quot;%d+ (%d+)&amp;quot;)&lt;br /&gt;
							end	&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				elseif val == &amp;quot;iso&amp;quot; then&lt;br /&gt;
					frmt = &amp;quot;iso&amp;quot;&lt;br /&gt;
					year, monthNum, day = string.match(datePart, allowedFormats[val])&lt;br /&gt;
					month = months[tonumber(monthNum)]&lt;br /&gt;
				elseif val == &amp;quot;isoSlash&amp;quot; then&lt;br /&gt;
					frmt = &amp;quot;iso&amp;quot;&lt;br /&gt;
					day, monthNum, year = string.match(datePart, allowedFormats[val])&lt;br /&gt;
					month = months[tonumber(monthNum)]	&lt;br /&gt;
				end&lt;br /&gt;
				if not (year == nil) then&lt;br /&gt;
					return { [&amp;quot;day&amp;quot;]=day, [&amp;quot;month&amp;quot;]=month, [&amp;quot;year&amp;quot;]=year, [&amp;quot;frmt&amp;quot;]=frmt }	&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
	return { [&amp;quot;day&amp;quot;]=day, [&amp;quot;month&amp;quot;]=month, [&amp;quot;year&amp;quot;]=year, [&amp;quot;frmt&amp;quot;]=frmt }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local transformDate = function(text, dateData, dateFormat)&lt;br /&gt;
	if ((dateData[&amp;quot;day&amp;quot;] == nil) and (dateData[&amp;quot;month&amp;quot;] == nil) and (dateData[&amp;quot;year&amp;quot;] == nil)) or dateData == nil then&lt;br /&gt;
		return &amp;quot;Invalid entry&amp;quot;	&lt;br /&gt;
	end&lt;br /&gt;
	if dateFormat == &amp;quot;&amp;quot; then&lt;br /&gt;
		dateFormat = dateData[&amp;quot;frmt&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local returnString = &amp;quot;&amp;quot;&lt;br /&gt;
	if (not (dateData[&amp;quot;day&amp;quot;] == nil)) and (not (dateData[&amp;quot;month&amp;quot;] == nil)) and (not (dateData[&amp;quot;year&amp;quot;] == nil)) then&lt;br /&gt;
		if tonumber(dateData[&amp;quot;day&amp;quot;]) &amp;lt; 10 then&lt;br /&gt;
			dateData[&amp;quot;day&amp;quot;] = &amp;quot;0&amp;quot; .. dateData[&amp;quot;day&amp;quot;]	&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if dateFormat == &amp;quot;dmy&amp;quot; then&lt;br /&gt;
			returnString = glueString(dateData[&amp;quot;day&amp;quot;], dateData[&amp;quot;month&amp;quot;], dateData[&amp;quot;year&amp;quot;], &amp;quot; &amp;quot;)&lt;br /&gt;
		elseif dateFormat == &amp;quot;mdy&amp;quot; then&lt;br /&gt;
			returnString = dateData[&amp;quot;month&amp;quot;] .. &amp;quot; &amp;quot; .. dateData[&amp;quot;day&amp;quot;] .. &amp;quot;, &amp;quot; .. dateData[&amp;quot;year&amp;quot;]&lt;br /&gt;
		elseif dateFormat == &amp;quot;iso&amp;quot; then&lt;br /&gt;
			local month = 0&lt;br /&gt;
			for index, value in ipairs(months) do&lt;br /&gt;
		        if value == dateData[&amp;quot;month&amp;quot;] then&lt;br /&gt;
		        	month = index&lt;br /&gt;
		        end&lt;br /&gt;
		    end&lt;br /&gt;
		    local monthString = tostring(month)&lt;br /&gt;
		    if month &amp;lt; 10 then&lt;br /&gt;
		    	monthString = &amp;quot;0&amp;quot; .. monthString&lt;br /&gt;
		    end&lt;br /&gt;
			returnString = glueString(dateData[&amp;quot;year&amp;quot;], monthString, dateData[&amp;quot;day&amp;quot;], &amp;quot;-&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (not (dateData[&amp;quot;month&amp;quot;] == nil)) and (not (dateData[&amp;quot;year&amp;quot;] == nil)) and (dateFormat == &amp;quot;my&amp;quot;) then&lt;br /&gt;
		returnString = glueString(dateData[&amp;quot;month&amp;quot;], dateData[&amp;quot;year&amp;quot;], &amp;quot;&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if (dateFormat == &amp;quot;year&amp;quot;) and (not (dateData[&amp;quot;year&amp;quot;] == nil)) then&lt;br /&gt;
		returnString = dateData[&amp;quot;year&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if dateFormat == &amp;quot;plain&amp;quot; then&lt;br /&gt;
		returnString = glueString(dateData[&amp;quot;day&amp;quot;], dateData[&amp;quot;month&amp;quot;], &amp;quot;&amp;quot;, &amp;quot; &amp;quot;)	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if returnString == &amp;quot;&amp;quot; then&lt;br /&gt;
		return &amp;quot;Invalid entry&amp;quot;	&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, val in ipairs(circa) do&lt;br /&gt;
		if string.match(text, val) then&lt;br /&gt;
			returnString = &amp;quot;circa &amp;quot; .. returnString	&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, val in ipairs(christ) do&lt;br /&gt;
		if string.match(text, val) then&lt;br /&gt;
			returnString = glueString(returnString, val, &amp;quot;&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return returnString&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.getDate = function(frame) &lt;br /&gt;
	local text = frame.args.date&lt;br /&gt;
	local format = frame.args.format or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	-- identifyDate gets the day, month, year and standard format of the text&lt;br /&gt;
	local dateData = identifyDate(text)&lt;br /&gt;
	-- transformDate transforms to the right type of date&lt;br /&gt;
	local dateString = transformDate(text, dateData, string.lower(format))&lt;br /&gt;
&lt;br /&gt;
	return dateString&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Stibba0</name></author>
	</entry>
</feed>