<?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%3ADatesWD%2Ftemp</id>
	<title>Module:DatesWD/temp - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ADatesWD%2Ftemp"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:DatesWD/temp&amp;action=history"/>
	<updated>2026-05-28T07:32:39Z</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:DatesWD/temp&amp;diff=135956&amp;oldid=prev</id>
		<title>imported&gt;Carn at 11:39, 14 June 2021</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:DatesWD/temp&amp;diff=135956&amp;oldid=prev"/>
		<updated>2021-06-14T11:39:33Z</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;local p = {}&lt;br /&gt;
local bool_to_number={ [true]=1, [false]=0 }&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local snippet = require(&amp;#039;Module:Sandbox/Carn/TextSnippets&amp;#039;)&lt;br /&gt;
local err = &amp;quot;-&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- utility functions&lt;br /&gt;
local function purif(str)&lt;br /&gt;
    if str == &amp;quot;&amp;quot; or str == nil then&lt;br /&gt;
        return nil&lt;br /&gt;
    elseif type(tonumber(str)) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(tonumber(str))&lt;br /&gt;
    else&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
    -- need .5 -- ,5 number format converter?&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function inbord(val, down, up) -- is val in border from down to up?&lt;br /&gt;
	return not (type(up) ~= &amp;quot;number&amp;quot; or type(down) ~= &amp;quot;number&amp;quot; or type(val) ~= &amp;quot;number&amp;quot; or up &amp;lt; down or val &amp;lt; down or val &amp;gt; up)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local inlist = function ( var, list )&lt;br /&gt;
    local n = #list&lt;br /&gt;
	local inlist = false&lt;br /&gt;
	for i=1,n do&lt;br /&gt;
		if var == list[i] then inlist = true end&lt;br /&gt;
	end&lt;br /&gt;
    return inlist&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- calendar functions&lt;br /&gt;
local function unwarp(date) &lt;br /&gt;
	if not date then &lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	elseif type(date) ~= &amp;quot;table&amp;quot; then &lt;br /&gt;
		return date&lt;br /&gt;
	end&lt;br /&gt;
	return (date.year or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(date.month or &amp;quot;?&amp;quot;)..&amp;quot;-&amp;quot;..(date.day or &amp;quot;?&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local mnlang = {&amp;quot;en&amp;quot;, &amp;quot;de&amp;quot;, &amp;quot;fr&amp;quot;} --&amp;quot;ru_G&amp;quot;, &amp;quot;ru_N&amp;quot;, &lt;br /&gt;
&lt;br /&gt;
--	[&amp;quot;ru_G&amp;quot;] = {&amp;quot;января&amp;quot;,&amp;quot;февраля&amp;quot;,&amp;quot;марта&amp;quot;,&amp;quot;апреля&amp;quot;,&amp;quot;мая&amp;quot;,&amp;quot;июня&amp;quot;,&amp;quot;июля&amp;quot;,&amp;quot;августа&amp;quot;,&amp;quot;сентября&amp;quot;,&amp;quot;октября&amp;quot;,&amp;quot;ноября&amp;quot;,&amp;quot;декабря&amp;quot;},&lt;br /&gt;
--	[&amp;quot;ru_N&amp;quot;] = {&amp;quot;январь&amp;quot;,&amp;quot;февраль&amp;quot;,&amp;quot;март&amp;quot;,&amp;quot;апрель&amp;quot;,&amp;quot;май&amp;quot;,&amp;quot;июнь&amp;quot;,&amp;quot;июль&amp;quot;,&amp;quot;август&amp;quot;,&amp;quot;сентябрь&amp;quot;,&amp;quot;октябрь&amp;quot;,&amp;quot;ноябрь&amp;quot;,&amp;quot;декабрь&amp;quot;},&lt;br /&gt;
local month_lang = { &lt;br /&gt;
	[&amp;quot;en&amp;quot;] = {&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;
	[&amp;quot;de&amp;quot;] = {&amp;quot;januar&amp;quot;, &amp;quot;februar&amp;quot;, &amp;quot;märz&amp;quot;, &amp;quot;april&amp;quot;, &amp;quot;mai&amp;quot;, &amp;quot;juni&amp;quot;,&amp;quot;juli&amp;quot;, &amp;quot;august&amp;quot;, &amp;quot;september&amp;quot;, &amp;quot;oktober&amp;quot;, &amp;quot;november&amp;quot;, &amp;quot;dezember&amp;quot;},&lt;br /&gt;
	[&amp;quot;fr&amp;quot;] = {&amp;quot;janvier&amp;quot;, &amp;quot;février&amp;quot;, &amp;quot;mars&amp;quot;, &amp;quot;avril&amp;quot;, &amp;quot;mai&amp;quot;, &amp;quot;juin&amp;quot;,&amp;quot;juillet&amp;quot;, &amp;quot;août&amp;quot;, &amp;quot;septembre&amp;quot;, &amp;quot;octobre&amp;quot;, &amp;quot;novembre&amp;quot;, &amp;quot;décembre&amp;quot;}&lt;br /&gt;
	}&lt;br /&gt;
local monthd = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} -- old table of days in mounth&lt;br /&gt;
&lt;br /&gt;
--	{&amp;quot;(%d%d)[-%.%s/\\](%d%d%d%d?)&amp;quot;, [&amp;quot;order&amp;quot;] = {2,3} }, 	-- mm yyyy&lt;br /&gt;
--	{&amp;quot;(%d%d%d%d?)[-%.%s/\\](%d%d)&amp;quot;, [&amp;quot;order&amp;quot;] = {3,2} }, 	-- yyyy mm&lt;br /&gt;
local pattern = { &lt;br /&gt;
	{&amp;quot;(-?%d%d%d%d?)[-%.%s/\\](%d%d)[-%.%s/\\](%d%d)&amp;quot;,  	[&amp;quot;order&amp;quot;] = {3,2,1} },  -- yyyy mm dd&lt;br /&gt;
	{&amp;quot;(%d+)[-%.%s/\\](%d+)[-%.%s/\\](%d%d%d%d?)&amp;quot;,	[&amp;quot;order&amp;quot;] = {1,2,3} }, 		-- dd mm yyyy&lt;br /&gt;
	{&amp;quot;(%d+)%s(%l+)%s(%d%d%d%d?)&amp;quot;, 	[&amp;quot;order&amp;quot;] = {1,2,3} }, 	-- d mmm y&lt;br /&gt;
	{&amp;quot;(%l+)%s(%d+),?%s(%d%d%d%d?)&amp;quot;, [&amp;quot;order&amp;quot;] = {2,1,3} }, 	-- mmm d, y&lt;br /&gt;
	{&amp;quot;(%l+)%s(%d%d%d%d?)&amp;quot;, 	[&amp;quot;order&amp;quot;] = {2,3} }, 			-- mmm y&lt;br /&gt;
	{&amp;quot;(%d%d%d%d?)%s(%l+)&amp;quot;, 	[&amp;quot;order&amp;quot;] = {3,2} }, 			-- y mmm&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Will be filled automatically from above table&lt;br /&gt;
local reverse_month_lang = {} &lt;br /&gt;
&lt;br /&gt;
local reverse_table = function (strait_table)&lt;br /&gt;
	local reversed_table = {}&lt;br /&gt;
	for k,v in pairs(strait_table) do&lt;br /&gt;
		reversed_table[v] = k&lt;br /&gt;
	end&lt;br /&gt;
	return reversed_table&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local filling_months = function (mnlang, month_lang)&lt;br /&gt;
	for i=1, #mnlang do&lt;br /&gt;
		reverse_month_lang[mnlang[i]] = reverse_table(month_lang[mnlang[i]])&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
filling_months(mnlang, month_lang)&lt;br /&gt;
&lt;br /&gt;
local function leap_year(y,jul)&lt;br /&gt;
	if (not y) or (type(y) ~= &amp;quot;number&amp;quot;)&lt;br /&gt;
		then return false&lt;br /&gt;
	elseif (y % 4) ~= 0&lt;br /&gt;
		then return false&lt;br /&gt;
	elseif not jul and (y % 100 == 0 and y % 400 ~= 0)&lt;br /&gt;
		then return false&lt;br /&gt;
	else return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isdate ( chain , jul ) -- можно использовать для проверки таблиц с полями day, month, year&lt;br /&gt;
	if not chain then return false&lt;br /&gt;
	elseif (not type(chain) == &amp;quot;table&amp;quot;)&lt;br /&gt;
	or (not inbord(chain.year,-9999,9999))&lt;br /&gt;
	or (not inbord(chain.month,1,12))&lt;br /&gt;
	or (not inbord(chain.day,1,31))&lt;br /&gt;
	or chain.day &amp;gt; monthd[chain.month]&lt;br /&gt;
--	or chain.year == 0&lt;br /&gt;
	then return false&lt;br /&gt;
	elseif chain.month == 2 and chain.day == 29 and not leap_year(chain.year,jul)&lt;br /&gt;
		then return false&lt;br /&gt;
	else return true end&lt;br /&gt;
--  check for other calendars needed?&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- функция для нормализации значений дат и перевода месяцев в числа&lt;br /&gt;
local function numerize(str)&lt;br /&gt;
    if type(str) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(str)&lt;br /&gt;
	elseif str == &amp;quot;&amp;quot; or str == nil or type(str) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		return nil&lt;br /&gt;
    elseif type(tonumber(str)) == &amp;quot;number&amp;quot; then&lt;br /&gt;
        return math.floor(tonumber(str))&lt;br /&gt;
    else&lt;br /&gt;
    	for i=1, #mnlang do&lt;br /&gt;
    		if inlist(mw.ustring.lower(str),month_lang[mnlang[i]]) then&lt;br /&gt;
    			mnlang.curr = mnlang[i]&lt;br /&gt;
				return reverse_month_lang[mnlang[i]][mw.ustring.lower(str)]&lt;br /&gt;
			end&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parse_date(status, date_string)&lt;br /&gt;
	status = status or {}&lt;br /&gt;
	if type(date_string) ~= &amp;quot;string&amp;quot; or date_string == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
	local out_date_str = {&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;}&lt;br /&gt;
	for i=1, #pattern do&lt;br /&gt;
		local result_1, result_2, result_3 = mw.ustring.match(mw.ustring.lower(date_string),pattern[i][1])&lt;br /&gt;
		if (result_1 or &amp;quot;&amp;quot;) &amp;gt; &amp;quot;&amp;quot; then&lt;br /&gt;
			status.pattern = i&lt;br /&gt;
			out_date_str[pattern[i].order[1]] = result_1&lt;br /&gt;
    		out_date_str[pattern[i].order[2]] = result_2&lt;br /&gt;
    		if (pattern[i].order[3]) then out_date_str[pattern[i].order[3]] = result_3 end&lt;br /&gt;
    		break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local date = {&lt;br /&gt;
		[&amp;quot;day&amp;quot;]  =numerize(out_date_str[1]),&lt;br /&gt;
		[&amp;quot;month&amp;quot;]=numerize(out_date_str[2]),&lt;br /&gt;
		[&amp;quot;year&amp;quot;] =numerize(out_date_str[3])}&lt;br /&gt;
	return status, date&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- OLD FUNCTION&lt;br /&gt;
local function numstr2date(datein)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
    local dateout = {}&lt;br /&gt;
    for num in string.gmatch(datein,&amp;quot;(%d+)&amp;quot;) do&lt;br /&gt;
        table.insert(nums,purif(num))&lt;br /&gt;
    end&lt;br /&gt;
    if #nums ~= 3 then error(&amp;quot;Wrong format: 3 numbers expected&amp;quot;)&lt;br /&gt;
    elseif not inbord(nums[2],1,12) then error(&amp;quot;Wrong month&amp;quot;)&lt;br /&gt;
    elseif not inbord(nums[3],1,31) then&lt;br /&gt;
        dateout = {[&amp;quot;year&amp;quot;]=nums[3], [&amp;quot;month&amp;quot;]=nums[2], [&amp;quot;day&amp;quot;]=nums[1]}&lt;br /&gt;
    elseif not inbord(nums[1],1,31) then&lt;br /&gt;
        dateout = {[&amp;quot;year&amp;quot;]=nums[1], [&amp;quot;month&amp;quot;]=nums[2], [&amp;quot;day&amp;quot;]=nums[3]}&lt;br /&gt;
    else&lt;br /&gt;
--		local lang = mw.getContentLanguage()&lt;br /&gt;
--		implement lang:formatDate(format,datein,true) here&lt;br /&gt;
        return error(&amp;quot;Unable to recognize date&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function date2str(datein)&lt;br /&gt;
	if not isdate(datein) then return error(&amp;quot;Wrong date&amp;quot;) end&lt;br /&gt;
	local dateout = os.date(&amp;quot;%Y-%m-%d&amp;quot;, os.time(datein))&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gri2jd( datein )&lt;br /&gt;
	if not isdate(datein) then return error(&amp;quot;Wrong date&amp;quot;) end&lt;br /&gt;
    local year = datein.year&lt;br /&gt;
    local month = datein.month&lt;br /&gt;
    local day = datein.day&lt;br /&gt;
    -- jd calculation&lt;br /&gt;
    local a = math.floor((14 - month)/12)&lt;br /&gt;
    local y = year + 4800 - a&lt;br /&gt;
    local m = month + 12*a - 3&lt;br /&gt;
    local offset = math.floor(y/4) - math.floor(y/100) + math.floor(y/400) - 32045&lt;br /&gt;
    local jd = day + math.floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
    -- jd validation&lt;br /&gt;
    local low, high = -1931076.5, 5373557.49999&lt;br /&gt;
    if not (low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
        return error(&amp;quot;Wrong date&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
	return jd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jd2jul( jd )&lt;br /&gt;
	if type(jd) ~= &amp;quot;number&amp;quot; then return error(&amp;quot;Wrong jd&amp;quot;) end&lt;br /&gt;
    -- calendar date calculation&lt;br /&gt;
    local c = jd + 32082&lt;br /&gt;
    local d = math.floor((4*c + 3)/1461)&lt;br /&gt;
    local e = c - math.floor(1461*d/4)&lt;br /&gt;
    local m = math.floor((5*e + 2)/153)&lt;br /&gt;
    local year_out = d - 4800 + math.floor(m/10)&lt;br /&gt;
    local month_out = m + 3 - 12*math.floor(m/10)&lt;br /&gt;
    local day_out = e - math.floor((153*m + 2)/5) + 1&lt;br /&gt;
    -- output&lt;br /&gt;
    local dateout = {[&amp;quot;year&amp;quot;]=year_out, [&amp;quot;month&amp;quot;]=month_out, [&amp;quot;day&amp;quot;]=day_out}&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jul2jd( datein )&lt;br /&gt;
	if not isdate(datein) then return error(&amp;quot;Wrong date&amp;quot;) end&lt;br /&gt;
    local year = datein.year&lt;br /&gt;
    local month = datein.month&lt;br /&gt;
    local day = datein.day&lt;br /&gt;
    -- jd calculation&lt;br /&gt;
    local a = math.floor((14 - month)/12)&lt;br /&gt;
    local y = year + 4800 - a&lt;br /&gt;
    local m = month + 12*a - 3&lt;br /&gt;
    local offset = math.floor(y/4) - 32083&lt;br /&gt;
    local jd = day + math.floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
    -- jd validation&lt;br /&gt;
    local low, high = -1930999.5, 5373484.49999&lt;br /&gt;
    if not (low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
        return error(&amp;quot;Wrong date&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
	return jd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jd2gri( jd )&lt;br /&gt;
    -- calendar date calculation&lt;br /&gt;
    local a = jd + 32044&lt;br /&gt;
    local b = math.floor((4*a + 3) / 146097)&lt;br /&gt;
    local c = a - math.floor(146097*b/4)&lt;br /&gt;
    local d = math.floor((4*c+3)/1461)&lt;br /&gt;
    local e = c - math.floor(1461*d/4)&lt;br /&gt;
    local m = math.floor((5*e+2)/153)&lt;br /&gt;
    local day_out =  e - math.floor((153*m+2)/5)+1&lt;br /&gt;
    local month_out = m + 3 - 12*math.floor(m/10)&lt;br /&gt;
    local year_out = 100*b + d - 4800 + math.floor(m/10)&lt;br /&gt;
    -- output&lt;br /&gt;
    local dateout = {[&amp;quot;year&amp;quot;]=year_out, [&amp;quot;month&amp;quot;]=month_out, [&amp;quot;day&amp;quot;]=day_out}&lt;br /&gt;
    return dateout&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- =p.NthDay(mw.getCurrentFrame():newChild{title=&amp;quot;1&amp;quot;,args={&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2020&amp;quot;,&amp;quot;%Y-%m-%d&amp;quot;}}) &lt;br /&gt;
&lt;br /&gt;
function p.NthDay( frame )&lt;br /&gt;
    local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
    local num, wday, mont, yea, format = &lt;br /&gt;
    	purif(args[1]), purif(args[2]), purif(args[3]), purif(args[4]), args[5]&lt;br /&gt;
    if not format then format = &amp;quot;%Y-%m-%d&amp;quot; end&lt;br /&gt;
    if not inbord(num,-5,5) then &lt;br /&gt;
    	return error(&amp;quot;The number must be between -5 and 5&amp;quot;)&lt;br /&gt;
    elseif num == 0 then &lt;br /&gt;
    	return error(&amp;quot;The number must not be zero&amp;quot;) end&lt;br /&gt;
    if not inbord(wday,0,6) then &lt;br /&gt;
    	return error(&amp;quot;The day of the week must be between 0 and 6&amp;quot;) end&lt;br /&gt;
    if not inbord(mont,1,12) then &lt;br /&gt;
    	return error(&amp;quot;The month must be between 1 and 12&amp;quot;) end&lt;br /&gt;
    if not inbord(yea,0,9999) then &lt;br /&gt;
    	return error(&amp;quot;Wrong year number&amp;quot;) end&lt;br /&gt;
    if inbord(num,1,5) then&lt;br /&gt;
        local m_start = os.time{year=yea, month=mont, day=1, hour=0}&lt;br /&gt;
        local m_wds = tonumber(os.date(&amp;quot;%w&amp;quot;, m_start)) &lt;br /&gt;
        local start_shift = (&lt;br /&gt;
            (num - bool_to_number[wday &amp;gt;= m_wds]) * 7 &lt;br /&gt;
            - (m_wds - wday)&lt;br /&gt;
            ) * 24 * 60 * 60&lt;br /&gt;
        local tim = m_start + start_shift&lt;br /&gt;
        if tonumber(os.date(&amp;quot;%m&amp;quot;, tim)) == mont then&lt;br /&gt;
            return (os.date(format, tim))&lt;br /&gt;
        else&lt;br /&gt;
            return (err)&lt;br /&gt;
        end&lt;br /&gt;
    elseif inbord(num,-5,-1) then&lt;br /&gt;
        local m_end = os.time{year = yea, month = mont + 1, day = 1, hour = 0} - 24 * 60 * 60&lt;br /&gt;
        local m_wde = tonumber(os.date(&amp;quot;%w&amp;quot;, m_end))&lt;br /&gt;
        local end_shift = ((math.abs(num + 1) + bool_to_number[wday &amp;gt; m_wde]) * 7 &lt;br /&gt;
            + (m_wde - wday)) * 24 * 60 * 60&lt;br /&gt;
        local tim = m_end - end_shift&lt;br /&gt;
        if tonumber(os.date(&amp;quot;%m&amp;quot;, tim)) == mont then&lt;br /&gt;
            return (os.date(format, tim))&lt;br /&gt;
        else&lt;br /&gt;
            return (err)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function exam(smth,name)&lt;br /&gt;
	name = name and mw.log(name) or &amp;quot;&amp;quot;&lt;br /&gt;
	if type(smth) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		mw.logObject(smth)&lt;br /&gt;
		return smth&lt;br /&gt;
	else&lt;br /&gt;
		mw.log(smth)&lt;br /&gt;
		return smth&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-- =p.test(mw.getCurrentFrame():newChild{title=&amp;quot;1&amp;quot;,args={&amp;quot;1.1.2020&amp;quot;}}) &lt;br /&gt;
-- =p.test(mw.getCurrentFrame():newChild{title=&amp;quot;1&amp;quot;,args={&amp;quot;2020-01-01&amp;quot;}}) &lt;br /&gt;
function p.test(frame)&lt;br /&gt;
	local args = getArgs(frame, { frameOnly = true })&lt;br /&gt;
	args.sq_brts = true&lt;br /&gt;
	local ns_sh_date, ns_year, os_sh_date = args[1],args[2],args[3]&lt;br /&gt;
	local ns_date_string = (ns_sh_date or &amp;quot;&amp;quot;) .. (ns_year and (&amp;quot; &amp;quot; .. ns_year) or &amp;quot;&amp;quot;)&lt;br /&gt;
	local status, ns_date = parse_date(nil,ns_date_string)&lt;br /&gt;
	local os_date = jd2jul(gri2jd(ns_date))&lt;br /&gt;
    local in_order = pattern[status.pattern][&amp;quot;order&amp;quot;]&lt;br /&gt;
    &lt;br /&gt;
    local space =		snippet:dress{[&amp;quot;text&amp;quot;]= &amp;quot; &amp;quot;, a=0, z=0}&lt;br /&gt;
	local empty =		snippet:dress{[&amp;quot;text&amp;quot;]= &amp;quot;&amp;quot;, a=0, z=0}&lt;br /&gt;
	local left =		snippet:dress{[&amp;quot;text&amp;quot;] = args.sq_brts and &amp;quot;&amp;amp;#091;&amp;quot; or &amp;quot;(&amp;quot;, [&amp;quot;a&amp;quot;] = 3, [&amp;quot;z&amp;quot;] = 0}&lt;br /&gt;
	local right =		snippet:dress{[&amp;quot;text&amp;quot;] = args.sq_brts and &amp;quot;&amp;amp;#093;&amp;quot; or &amp;quot;)&amp;quot;, [&amp;quot;a&amp;quot;] = 0, [&amp;quot;z&amp;quot;] = 3}&lt;br /&gt;
	local os_mark = 	snippet:dress{[&amp;quot;text&amp;quot;]= &amp;quot;[[Old Style and New Style dates|O.S.]]&amp;quot;}&lt;br /&gt;
	local os_day =		snippet:dress{[&amp;quot;text&amp;quot;]= os_date.day}&lt;br /&gt;
	local os_month =	snippet:dress{[&amp;quot;text&amp;quot;]= month_lang[mnlang.curr or &amp;quot;en&amp;quot;][os_date.month]}&lt;br /&gt;
	local os_year =		snippet:dress{[&amp;quot;text&amp;quot;]= os_date.year}&lt;br /&gt;
	local ns_day =		snippet:dress{[&amp;quot;text&amp;quot;]= ns_date.day}&lt;br /&gt;
	local ns_month =	snippet:dress{[&amp;quot;text&amp;quot;]= month_lang[mnlang.curr or &amp;quot;en&amp;quot;][ns_date.month]}&lt;br /&gt;
	local ns_year =		snippet:dress{[&amp;quot;text&amp;quot;]= ns_date.year}&lt;br /&gt;
	local co_year =		empty&lt;br /&gt;
	&lt;br /&gt;
	if os_date.year == ns_date.year then&lt;br /&gt;
		co_year = ns_year&lt;br /&gt;
		ns_year = empty&lt;br /&gt;
		os_year = empty&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    if in_order[1] &amp;gt; in_order[2] then&lt;br /&gt;
    	return ns_month + ns_day + ns_year + left + os_mark + os_month + os_day + os_year + right + co_year&lt;br /&gt;
    else&lt;br /&gt;
    	return ns_day + ns_month + ns_year + left + os_mark + os_day + os_month + os_year + right + co_year&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Carn</name></author>
	</entry>
</feed>