<?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%2FUserring%2FDates</id>
	<title>Module:Sandbox/Userring/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%2FUserring%2FDates"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Userring/Dates&amp;action=history"/>
	<updated>2026-05-26T12:41:15Z</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/Userring/Dates&amp;diff=146364&amp;oldid=prev</id>
		<title>imported&gt;Userring at 17:49, 23 January 2020</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Userring/Dates&amp;diff=146364&amp;oldid=prev"/>
		<updated>2020-01-23T17:49:21Z</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;-- Userring Google Code In&lt;br /&gt;
&lt;br /&gt;
-- Lua Task 9 - Date formats&lt;br /&gt;
p = {}&lt;br /&gt;
&lt;br /&gt;
function p.getdate(frame)&lt;br /&gt;
	-- Function to get a date from a given text&lt;br /&gt;
	-- Getting inputs of the text and format&lt;br /&gt;
	local instring = frame.args.text or &amp;quot;&amp;quot;&lt;br /&gt;
	local given_outformat = frame.args.format or &amp;quot;&amp;quot;&lt;br /&gt;
	local given_outvalue = 0&lt;br /&gt;
	local text_format = &amp;quot;&amp;quot;&lt;br /&gt;
	local text_format_value = 0&lt;br /&gt;
	-- Assigning general variables which will be later used in the code&lt;br /&gt;
	local months = {&amp;quot;January&amp;quot;, &amp;quot;February&amp;quot;, &amp;quot;March&amp;quot;, &amp;quot;April&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;June&amp;quot;, &amp;quot;July&amp;quot;, &amp;quot;August&amp;quot;, &amp;quot;September&amp;quot;, &amp;quot;October&amp;quot;, &amp;quot;November&amp;quot;, &amp;quot;December&amp;quot;}&lt;br /&gt;
	local mplace, month_number, d, m, y = 0, 0, 0, 0&lt;br /&gt;
	local certainty = nil&lt;br /&gt;
	-- Functions for processes that are repetitively executed.&lt;br /&gt;
	local function get_month_from_text()&lt;br /&gt;
		possible_months = {}&lt;br /&gt;
		for possible_month in string.gmatch(instring, &amp;quot;%a+&amp;quot;) do&lt;br /&gt;
			unchanged_mon = possible_month&lt;br /&gt;
			mon_tocheck = string.lower(possible_month)&lt;br /&gt;
			mon_tocheck_1 = string.sub(mon_tocheck, 1, 1)&lt;br /&gt;
			mon_tocheck_rest = string.sub(mon_tocheck, 2)&lt;br /&gt;
			mon_tocheck = string.sub(string.upper(mon_tocheck_1) .. mon_tocheck_rest, 1, 3)&lt;br /&gt;
			for i=1, table.getn(months) do &lt;br /&gt;
				checking_against = string.sub(months[i], 1, 3)&lt;br /&gt;
				if mon_tocheck == checking_against then&lt;br /&gt;
					month_number = i&lt;br /&gt;
					mplace = string.find(instring, unchanged_mon)&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local function verify_date()&lt;br /&gt;
		-- Function to verify that the date exists&lt;br /&gt;
		max_date = 0&lt;br /&gt;
		d, month_number, y = tonumber(d), tonumber(month_number), tonumber(y)&lt;br /&gt;
		if month_number == 4 or month_number == 6 or month_number == 9 or month_number == 11 then&lt;br /&gt;
		 	max_date = 30&lt;br /&gt;
		elseif month_number == 2 then&lt;br /&gt;
			if y%400 == 0 or (y%100 ~= 0 and y%4 == 0) then&lt;br /&gt;
				max_date = 29&lt;br /&gt;
			else&lt;br /&gt;
				max_date = 28&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			max_date = 31&lt;br /&gt;
		end&lt;br /&gt;
		if d &amp;gt; max_date then&lt;br /&gt;
			return false&lt;br /&gt;
		else &lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function get_output()&lt;br /&gt;
		-- Function to return the output&lt;br /&gt;
		certainty = string.find(instring, &amp;quot;uncertain&amp;quot;) or string.find(instring, &amp;quot;around&amp;quot;)&lt;br /&gt;
		if certainty == nil then&lt;br /&gt;
			certainty = &amp;quot;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			certainty = &amp;quot;circa &amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		addition = &amp;quot;&amp;quot;&lt;br /&gt;
		if string.find(instring, &amp;quot;AD&amp;quot;) then&lt;br /&gt;
			addition = &amp;quot;AD&amp;quot;&lt;br /&gt;
		elseif string.find(instring, &amp;quot;BC&amp;quot;) then&lt;br /&gt;
			addition = &amp;quot;BC&amp;quot;&lt;br /&gt;
		elseif string.find(instring, &amp;quot;BCE&amp;quot;) then&lt;br /&gt;
			addition = &amp;quot;BCE&amp;quot;&lt;br /&gt;
		elseif string.find(instring, &amp;quot;CE&amp;quot;) then&lt;br /&gt;
			addition = &amp;quot;CE&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if text_format == &amp;quot;mdy&amp;quot; then&lt;br /&gt;
			verified = verify_date()&lt;br /&gt;
			if verified == false then&lt;br /&gt;
				return &amp;quot;Invalid entry.&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				if month_number == 0 then&lt;br /&gt;
					m = months[tonumber(m)]&lt;br /&gt;
					return certainty .. m .. &amp;quot; &amp;quot; .. d .. &amp;quot;, &amp;quot; .. y .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
				else&lt;br /&gt;
					return certainty .. months[tonumber(month_number)] .. &amp;quot; &amp;quot; .. d .. &amp;quot;, &amp;quot; .. y .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif text_format == &amp;quot;dmy&amp;quot; then&lt;br /&gt;
			verified = verify_date()&lt;br /&gt;
			if verified == false then&lt;br /&gt;
				return &amp;quot;Invalid entry.&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				if month_number == 0 then&lt;br /&gt;
					m = months[tonumber(m)]&lt;br /&gt;
					return certainty .. d .. &amp;quot; &amp;quot; .. m .. &amp;quot; &amp;quot; .. y .. &amp;quot; &amp;quot; .. addition &lt;br /&gt;
				else&lt;br /&gt;
					return certainty .. d .. &amp;quot; &amp;quot; .. months[tonumber(month_number)] .. &amp;quot; &amp;quot; .. y .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif text_format == &amp;quot;my&amp;quot; then&lt;br /&gt;
			return certainty .. m .. &amp;quot; &amp;quot; .. y .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
		elseif text_format == &amp;quot;year&amp;quot; then&lt;br /&gt;
			return certainty .. y .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
		elseif text_format == &amp;quot;iso&amp;quot; then&lt;br /&gt;
			if month_number == 0 then&lt;br /&gt;
				return certainty .. y .. &amp;quot;-&amp;quot; .. m .. &amp;quot;-&amp;quot; .. d .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
			else&lt;br /&gt;
				return certainty .. y .. &amp;quot;-&amp;quot; .. month_number .. &amp;quot;-&amp;quot; .. d .. &amp;quot; &amp;quot; .. addition&lt;br /&gt;
			end&lt;br /&gt;
		elseif text_format == &amp;quot;Invalid&amp;quot; then&lt;br /&gt;
			return &amp;quot;Invalid entry&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function verify_format()&lt;br /&gt;
		-- Function to verify the format given&lt;br /&gt;
		if given_outformat == &amp;quot;dmy&amp;quot; then&lt;br /&gt;
			given_outvalue = 3&lt;br /&gt;
			return true&lt;br /&gt;
		elseif given_outformat == &amp;quot;mdy&amp;quot; then&lt;br /&gt;
			given_outvalue = 3&lt;br /&gt;
			return true&lt;br /&gt;
		elseif given_outformat == &amp;quot;iso&amp;quot; then&lt;br /&gt;
			given_outvalue = 3&lt;br /&gt;
			return true&lt;br /&gt;
		elseif given_outformat == &amp;quot;my&amp;quot; then&lt;br /&gt;
			given_outvalue = 2&lt;br /&gt;
			return true&lt;br /&gt;
		elseif given_outformat == &amp;quot;year&amp;quot; then&lt;br /&gt;
			given_outvalue = 1&lt;br /&gt;
			return true&lt;br /&gt;
		elseif given_outformat == &amp;quot;&amp;quot; or given_outformat == nil then&lt;br /&gt;
			return true&lt;br /&gt;
		else &lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Checking if inputs are valid&lt;br /&gt;
	checked_format = verify_format()&lt;br /&gt;
	if checked_format == false then&lt;br /&gt;
		return &amp;quot;Invalid Entry.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if instring == &amp;quot;&amp;quot; or instring == nil then&lt;br /&gt;
		return &amp;quot;Invalid Entry.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local function get_y()&lt;br /&gt;
		-- Function to get the year&lt;br /&gt;
		y_tocheck = {}&lt;br /&gt;
		for pos_y in string.gmatch(instring, &amp;quot;%d+&amp;quot;) do&lt;br /&gt;
			table.insert(y_tocheck, tonumber(pos_y))&lt;br /&gt;
		end&lt;br /&gt;
		if table.getn(y_tocheck) == 0 then&lt;br /&gt;
			text_format, text_format_value = &amp;quot;Invalid&amp;quot;, 0&lt;br /&gt;
		elseif table.getn(y_tocheck) == 1 then&lt;br /&gt;
			text_format, text_format_value = &amp;quot;year&amp;quot;, 1&lt;br /&gt;
			y = y_tocheck[1]&lt;br /&gt;
		else&lt;br /&gt;
			pos_y = y_tocheck[table.maxn(y_tocheck)]&lt;br /&gt;
			if tonumber(pos_y) &amp;gt; 31 then&lt;br /&gt;
				text_format, text_format_value = &amp;quot;year&amp;quot;, 1&lt;br /&gt;
				y = pos_y&lt;br /&gt;
			else&lt;br /&gt;
				text_format, text_format_value = &amp;quot;Invalid&amp;quot;, 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Checking if the date is in an ISO format.&lt;br /&gt;
	iso_1, iso_2, iso_3 = string.match(instring, &amp;quot;(%d+)%p(%d+)%p(%d+)&amp;quot;)&lt;br /&gt;
	-- If not, the date is the in format mdy, dmy, my or year&lt;br /&gt;
	if iso_1 == nil or iso_2 == nil or iso_3 == nil then&lt;br /&gt;
		month_checked = get_month_from_text()&lt;br /&gt;
		if month_checked == false then&lt;br /&gt;
			get_y()&lt;br /&gt;
		elseif month_checked == true then&lt;br /&gt;
			m = months[month_number]&lt;br /&gt;
			local pos_d_string = string.sub(instring, 1, mplace)&lt;br /&gt;
			for pos in string.gmatch(pos_d_string, &amp;quot;%d+&amp;quot;) do&lt;br /&gt;
				if tonumber(pos) &amp;lt;= 31 then&lt;br /&gt;
					d = tonumber(pos)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if d &amp;gt; 0 and not(m == nil) then&lt;br /&gt;
				text_format, text_format_value = &amp;quot;dmy&amp;quot;, 3&lt;br /&gt;
				local pos_dy_string = string.sub(instring, mplace)&lt;br /&gt;
				y = string.match(pos_dy_string, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
				if y == nil then&lt;br /&gt;
					return &amp;quot;Invalid entry.&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			elseif d == 0 and not(m == nil) then&lt;br /&gt;
				pos_comma_place = string.find(instring, &amp;quot;,&amp;quot;)&lt;br /&gt;
				if pos_comma_place == nil then&lt;br /&gt;
					text_format, text_format_value = &amp;quot;my&amp;quot;, 2&lt;br /&gt;
					local pos_my_string = string.sub(instring, mplace)&lt;br /&gt;
					y = string.match(pos_my_string, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					text_format, text_format_value = &amp;quot;mdy&amp;quot;, 3&lt;br /&gt;
					local pos_y_string = string.sub(instring, tonumber(pos_comma_place))&lt;br /&gt;
					y = string.match(pos_y_string, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
					local pos_d_string = string.sub(instring, mplace, pos_comma_place)&lt;br /&gt;
					local pos_d = string.match(pos_d_string, &amp;quot;%d+&amp;quot;)&lt;br /&gt;
					if tonumber(pos_d) &amp;lt;= 31 then&lt;br /&gt;
						d = tonumber(pos_d)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			elseif m == nil then&lt;br /&gt;
				m = 0&lt;br /&gt;
				get_y()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		text_format, text_format_value = &amp;quot;iso&amp;quot;, 3&lt;br /&gt;
		m = iso_2&lt;br /&gt;
		if tonumber(iso_1) &amp;gt; 31 then&lt;br /&gt;
			y = iso_1&lt;br /&gt;
			d = iso_3&lt;br /&gt;
		elseif tonumber(iso_3) &amp;gt; 31 then&lt;br /&gt;
			y = iso_3&lt;br /&gt;
			d = iso_1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if given_outformat == &amp;quot;&amp;quot; or given_outformat == nil then&lt;br /&gt;
		return get_output()&lt;br /&gt;
	else&lt;br /&gt;
		if given_outvalue &amp;lt; text_format_value then &lt;br /&gt;
			return &amp;quot;Invalid Entry.&amp;quot;&lt;br /&gt;
		elseif given_outvalue &amp;lt;= text_format_value then&lt;br /&gt;
			text_format = given_outformat&lt;br /&gt;
			return get_output()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Userring</name></author>
	</entry>
</feed>