Module:Sandbox/Redlead07/Dates

Revision as of 00:39, 13 December 2018 by imported>Redlead07
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Documentation for this module may be created at Module:Sandbox/Redlead07/Dates/doc

local p = {}

function p.dmyformat(frame)
	local dmydate, format = frame.args.dmydate or "", frame.args.format or ""
	local a = string.match(dmydate, "(%d+) %w+ %d+") or 
	string.match(dmydate, "(%w+) %d+, %d+") or
	string.match(dmydate, "(%w+) %d+ %d+") or 
	string.match(dmydate, "(%d+)/%d+/%d+") or 
	string.match(dmydate, "(%d+)-%d+-%d+") or
	string.match(dmydate, "(%d+)%w+ %w+ %d+") or
	string.match(dmydate, "(%w+) %d+") or 
	string.match(dmydate, "(%d+) %w+") or 
	string.match(dmydate, "(%d+) %d+") or
	string.match(dmydate, "(%w+)") or 
	string.match(dmydate, "(%d+) %w+ %w+") or 
	string.match(dmydate, "(%d+)%w+ %u%w+ %d+") or ""
	local b = string.match(dmydate, "%d+ (%w+) %d+") or 
	string.match(dmydate, "%w+ (%d+), %d+") or
	string.match(dmydate, "%w+ (%d+) %d+") or 
	string.match(dmydate, "%d+/(%d+)/%d+") or 
	string.match(dmydate, "%d+-(%d+)-%d+") or
	string.match(dmydate, "%d+%w+ (%w+) %d+") or 
	string.match(dmydate, "%w+ (%d+)") or 
	string.match(dmydate, "%d+ (%w+)") or
	string.match(dmydate, "%d+ (%d+)") or
	string.match(dmydate, "%d+%w+ (%u)(%w+) %d+") or ""
	local c = string.match(dmydate, "%d+ %w+ (%d+)") or  
	string.match(dmydate, "%d+ %d+ (%d+)") or 
	string.match(dmydate, "%w+ %d+, (%d+)") or	
	string.match(dmydate, "%d+/%d+/(%d+)") or 
	string.match(dmydate, "%d+-%d+-(%d+)") or
	string.match(dmydate, "%w+ %d+ (%d+)") or
	string.match(dmydate, "%d+%w+ %w+ (%d+)") or 
	string.match(dmydate, "%d+%w+ %u%w+ (%d+)") or ""
	local d = string.match(dmydate, "%d+ %w+ %d+ (%a+)") or ""
	local e = string.match(dmydate, "(%d+)-(%d+)-(%d+)") or ""
	local f = string.match(dmydate, "(%w+) (%d+), (%d+)") or ""
	local g = string.match(dmydate, "(%d+)/(%d+)/(%d+)") or ""
	local h = string.match(dmydate, "(%d+) (%w+) (%d+)") or ""
	local i = string.match(dmydate, "(%d+)") or ""
	local j = string.match(dmydate, "(%d+) (%w+)") or ""
	local k = string.match(dmydate, "(%d+) (%d+)") or ""
	local l = string.match(dmydate, "(%d+)(%w+) (%w+) (%d+)") or ""
	local m = string.match(dmydate, "(%d+) (%w+) (%d+) (%w+)") or ""
	local n = string.match(dmydate, "(%w+) (%w+) (%w+) (%w+)") or ""
	local o = string.match(dmydate, "(%d+)%w+ (%u)(%w+) (%d+)") or ""
	local p = string.match(dmydate, "(%d+)%U+(%a+)%D+(%d+)") or ""
	local a2 = tonumber(a) or 0 
	local a3 = string.find(a, "%d+") or ""
	local a4 = string.find(a, "%d?") or ""
	local a5 = string.find(a, "%a+") or ""
	local b2 = tonumber(b) or 0
	local b3 = string.find(b, "%a+") or ""
	local c2 = tonumber(c) or 0
	local c3 = string.find(a, "%d+") or ""
	local day = ""
	local month = ""
	local year = ""
	
	if i ~= "" and a2>0 and a2>31 then year = a2 end
	if a2>0 and a4 ~= "" then day = a2 end
	if a5 == "" then a5 = "" else month = a end
	if c2>0 and c2>31 and c3 ~= "" then year = c end
	if year == c and a2>0 and a4 ~= "" then 
		day = a2
		month = b
		end
	if year == a2 then
		month = b 
		day = c 
		end
	if day == a2 then 
		month = b 
		year = c 
		end
	if month == a2 and c3 ~= "" then
		day = b 
		year = c 
		end
	if month == a2  and c == "" then
		year = b 
		end
	if day == a2 and c == "" and a3 ~= "" then
		year = b 
		end
	if e ~= "" then
		year = a2
		month = b
		day = c
		end
	if f ~= "" then
		month = a
		day = b
		year = c
		end
	if g ~= "" then
		day = a2
		month = b
		year = c
		end
	if k ~= "" then
		day = a
		year = b
		end
	if o ~= "" then
		day = a2
		month = b
		year = c
		end
	if a2 ~= day and b ~= day and c ~= day then day = "" end
	if a2 ~= year and b ~= year and c ~= year then year = "" end
	local years = string.match(dmydate, "BCE") or string.match(dmydate, "BC") or
	string.match(dmydate, "CE") or string.match(dmydate, "AD") or ""
	if j ~= "" and c == "" and d == "" and years ~= "" then
		year = a2
		years = b
		end
	local days = tonumber(day) or 0
	year = tonumber(year) or 0
	local mnthnumber = string.match(dmydate, "%d+/(%d+)/%d+") or string.match(dmydate, "%d+-(%d+)-%d+")
	mnthnumber = tonumber(mnthnumber) or 0
	if 	mnthnumber ~= 0 then
	mnthname = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
	month = mnthname[mnthnumber]
	end
	
	month = month:gsub("^%l", string.upper)	
	local monthname = {Jan = "January", Feb = "February", Mar = "March", 
		Apr = "April", May = "May", Jun = "June", Jul = "July", Aug = "August", 
		Sep = "September", Oct = "October", Nov = "November", Dec = "December"} or ""
	local monthname2 = {January = "January", February = "February", March =
		"March", April = "April", May = "May", June = "June", July = "July",
		August = "August", September = "September", October = "October",
		November = "November", December = "December"} or ""
	local monthnum = {Jan = "01", Feb = "02", Mar = "03", Apr = "04", May = "05", Jun = "06", 
		Jul = "07", Aug = "08", Sep = "09", Oct = "10", Nov = "11", Dec = "12"}
	local monthnum2 = {January = "01", February = "02", March = "03", 
		April = "04", May = "05", June = "06", July = "07", August = "08", 
		September = "09", October = "10", November = "11", December = "12"} or ""
	monthnumber = monthnum[(month)] or monthnum2[(month)]
	months = monthname[(month)] or monthname2[(month)]
	if month == "feb" and (year % 4 == 0) and (year % 100 ~= 0) or (year % 400) == 0 then
		days_in_month = 29
	else
		days_in_month = 28
	end
	if month == "February" and (year % 4 == 0) and (year % 100 ~= 0) or (year % 400) == 0 then
		days_in_month = 29
	else
		days_in_month = 28
	end
	if months == "jan" or months == "January" then days_in_month = 31 end
	if months == "mar" or months == "March" then days_in_month = 31 end
	if months == "apr" or months == "April" then days_in_month = 30 end
	if months == "may" or months == "May" then days_in_month = 31 end
	if months == "jun" or months == "June" then days_in_month = 30 end
	if months == "jul" or months == "July" then days_in_month = 31 end	
	if months == "aug" or months == "August" then days_in_month = 31 end
	if months == "sep" or months == "September" then days_in_month = 30 end
	if months == "oct" or months == "October" then days_in_month = 31 end
	if months == "nov" or months == "November" then days_in_month = 30 end
	if months == "dec" or months == "December" then days_in_month = 31 end
	if format == "" and i ~= "" and j ~= "" and years ~= "" and m == "" then
	local no = string.format("%u %s", year, years)
	return no.."<br>"
	end
	if year ~= 0 and month ~= "" and days ~= 0 and years == "" and h ~= "" and j == ""
	and days<1 or days>days_in_month then
		return "Invalid entry".."<br>"
		end
	local circa = string.match(dmydate, "around") or string.match(dmydate, "sometime") or 
	string.match(dmydate, "uncertain") or ""
	if p ~= "" and years == "" and circa == "" and m == "" and h == "" then
		d, m, y = string.match(dmydate, "(%d+)%U+(%a+)%D+(%d+)")
		return d.." "..m.." "..y.."<br>"
		end
	if circa == "" and m == "" and n ~= "" then
	return "Invalid entry".."<br>"
	end
	if circa == "" and h ~= "" and format == "" and m ~= "" and years == "" and o == "" then
	return "Invalid entry".."<br>"
	end
	if circa ~= "" and format == "" and h ~= "" then
	local no = string.format("%u %s %u", day, months, year)
	return "circa".." "..no.."<br>"
	end
	if circa ~= "" and format == "mdy" then	
	local mdy = string.format("%s %u, %u", months, day, year) 
	return "circa".." "..mdy.."<br>"
	end
	if circa ~= "" and format == "year" and format ~= "" then
	local y = string.format("%u", year)
	return "circa".." "..y.."<br>"
	end
	if circa ~= "" and format == "" and i ~= "" and l == "" then
	local no = string.format("%u", year)
	return "circa".." "..no.."<br>"
	end
	if circa ~="" and format == "" and l ~= "" then
	local no = string.format("%u %s %u", day, months, year)
	return "circa".." "..no.."<br>"
	end

	if format == "iso" then 
	local iso = string.format("%u-%u-%u", year, monthnumber, day) 
	return iso.."<br>"
	end
	if format == "mdy" then
	local mdy = string.format("%s %u, %u", months, day, year)
	return mdy.."<br>"
	end
	if format == "dmy" then 	
	local dmy = string.format("%u %s %u", day, months, year)
	return dmy.."<br>"	
	end
	if format == "year" then
	local y = string.format("%u", year)
	return y.."<br>"
	end
	if format == "" and j ~= "" and c == "" and k == "" and a2<31 then
	local no = string.format("%u %s", day, months)
	return no.."<br>"
	end
	if format == "" and years ~= "" and m ~= "" then
	local no = string.format("%u %s %u %s", day, months, year, years) 
	return no.."<br>"
	end
	if format == "" and i ~= "" and b == "" and c == "" and a2<31 then
	local no = string.format("%u", day)
	return no.."<br>"
	end
	if format == "" and i ~= "" and c == "" and b2 == 0 and a2<31 then
	local no = string.format("%u", day)
	return no.."<br>"
	end
	if format == "" and h ~= "" then
	local no = string.format("%u %s %u", day, months, year)
	return no.."<br>"
	end
	if format == "" and k ~= "" and c == "" then
	local no = string.format("%u", year)
	return no.."<br>"
	end
	if format == "" and a2>31 and i ~= "" and j~= "" then
	local no = string.format("%u", year)
	return no.."<br>"
	end
	if format == "" and c == "" and b == "" and a2>0 and a2>31 then
	local no = string.format("%u", year)
	return no.."<br>"
	end
	if format == "" and g ~= "" then
	local no = string.format("%u-%u-%u", year, monthnumber, day)
	return no.."<br>"
	end
	if format == "mdy" and e ~= "" then
	local mdy = string.format("%s %u, %u", months, day, year)
	return mdy.."<br>"
	end
	if format == "" and e ~= "" then
	local no = string.format("%u-%u-%u", year, monthnumber, day)
	return no.."<br>"
	end
	if format == "" and o ~= "" then
	local no = string.format("%u %s %u", day, months, year)
	return no.."<br>"
	end
end


return p