<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="az">
	<id>https://wiki.anas.az/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ADates</id>
	<title>Modul:Dates - Redaktə tarixçəsi</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.anas.az/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ADates"/>
	<link rel="alternate" type="text/html" href="https://wiki.anas.az/mediawiki/index.php?title=Modul:Dates&amp;action=history"/>
	<updated>2026-05-10T04:15:38Z</updated>
	<subtitle>Vikidə bu səhifənin dəyişikliklər tarixçəsi</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.anas.az/mediawiki/index.php?title=Modul:Dates&amp;diff=138&amp;oldid=prev</id>
		<title>imported&gt;Nemoralis 16:22, 28 aprel 2023-də</title>
		<link rel="alternate" type="text/html" href="https://wiki.anas.az/mediawiki/index.php?title=Modul:Dates&amp;diff=138&amp;oldid=prev"/>
		<updated>2023-04-28T16:22:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Yeni səhifə&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
 Bu modulda tarixlərlə işləmək üçün lazım olan funksiyalar toplanmışdır.&lt;br /&gt;
]]&lt;br /&gt;
local Ordinal = require &amp;#039;Module:Ordinal&amp;#039;&lt;br /&gt;
local monthg = {&amp;#039;yanvar&amp;#039;, &amp;#039;fevral&amp;#039;, &amp;#039;mart&amp;#039;, &amp;#039;aprel&amp;#039;, &amp;#039;may&amp;#039;, &amp;#039;iyun&amp;#039;,&lt;br /&gt;
    &amp;#039;iyul&amp;#039;, &amp;#039;avqust&amp;#039;, &amp;quot;sentyabr&amp;quot;, &amp;quot;oktyabr&amp;quot;, &amp;quot;noyabr&amp;quot;, &amp;quot;dekabr&amp;quot;}&lt;br /&gt;
local monthg2 = {&amp;#039;yanvarda&amp;#039;, &amp;#039;fevralda&amp;#039;, &amp;#039;martda&amp;#039;, &amp;#039;apreldə&amp;#039;, &amp;#039;mayda&amp;#039;, &amp;#039;iyunda&amp;#039;,&lt;br /&gt;
    &amp;#039;iyulda&amp;#039;, &amp;#039;avqustda&amp;#039;, &amp;quot;sentyabrda&amp;quot;, &amp;quot;oktyabrda&amp;quot;, &amp;quot;noyabrda&amp;quot;, &amp;quot;dekabrda&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
local monthd = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}&lt;br /&gt;
&lt;br /&gt;
local function DecodeDate(d)&lt;br /&gt;
    --tarix: &amp;quot;%-?%d+&amp;quot;=il, &amp;quot;%d+%.%d+&amp;quot;=ayın tarixi, &amp;quot;%d+%.%d+%.%-?%d+&amp;quot;=GAİ,&lt;br /&gt;
    local nd=d:match(&amp;quot;^[%d.-]*&amp;quot;);&lt;br /&gt;
    local od=d:match(&amp;quot;^[%d.-]*%s*%(%s*([%d.-]*)%s*%)&amp;quot;);&lt;br /&gt;
    local tail = d:match(&amp;quot;^[%d.-]+%s*%(%s*[%d.-]+%s*%)%s*(%S.*)&amp;quot;) or d:match(&amp;quot;^[%d.-]+%s*([^%s%d].*)&amp;quot;);&lt;br /&gt;
    if nd:match(&amp;#039;^%-?%d+$&amp;#039; ) then&lt;br /&gt;
        return nil, nil, tonumber(nd), nil, nil, od and tonumber(od:match(&amp;quot;%-?%d+$&amp;quot;)),tail&lt;br /&gt;
    else&lt;br /&gt;
        local j,m,y=nd:match(&amp;quot;^(%d+)%.(%d+)%.?(%-?%d*)&amp;quot;);&lt;br /&gt;
        if j then&lt;br /&gt;
            if od then&lt;br /&gt;
                local oj, om, oy = od:match(&amp;quot;^(%d+)%.?(%d*)%.?(%-?%d*)&amp;quot;);&lt;br /&gt;
                return j and tonumber(j),&lt;br /&gt;
                       m and tonumber(m),&lt;br /&gt;
                       y&amp;gt;&amp;#039;&amp;#039; and tonumber(y) or nil,&lt;br /&gt;
                      oj and tonumber(oj),&lt;br /&gt;
                      om&amp;gt;&amp;#039;&amp;#039; and tonumber(om) or nil,&lt;br /&gt;
                      oy&amp;gt;&amp;#039;&amp;#039; and tonumber(oy) or nil,&lt;br /&gt;
                      tail&lt;br /&gt;
            end&lt;br /&gt;
            return j and tonumber(j), m and tonumber(m), y&amp;gt;&amp;#039;&amp;#039; and tonumber(y) or nil, nil, nil, nil, tail&lt;br /&gt;
        else return nil&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Diffy(d1,m1,y1,d0,m0,y0)--analoq Şəxs/Tarix/İl keçib&lt;br /&gt;
    return y1-y0 - ( y1*y0&amp;lt;=0 and 1 or 0 ) - ( (m1&amp;lt;m0 or m1==m0 and d1&amp;lt;d0) and 1 or 0 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Year0(y,t)-- analoq İl0&lt;br /&gt;
    if y&amp;gt;0 then return table.concat{&lt;br /&gt;
        &amp;#039;[[&amp;#039;, tostring(y), &amp;#039;|&amp;#039;, t and tostring(y)..&amp;#039;&amp;amp;nbsp;&amp;#039;..t or tostring(y), &amp;#039;]]&amp;#039;&lt;br /&gt;
    } else return table.concat{&lt;br /&gt;
        &amp;#039;[[&amp;#039;, tostring(-y), &amp;#039; e.ə.|&amp;#039;, &lt;br /&gt;
        t and tostring(-y)..&amp;#039;&amp;amp;nbsp;&amp;#039;..t or tostring(-y),&lt;br /&gt;
        &amp;#039;&amp;amp;nbsp;e.&amp;amp;nbsp;ə.]]&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function FormDate(j,m,y,oj,om,oy,mo)-- ~ Şəxs/Tarix/Logic 4&lt;br /&gt;
    if j then&lt;br /&gt;
        if not m then return &amp;quot;&amp;#039;&amp;#039;format yanlışdır&amp;#039;&amp;#039;&amp;quot; end&lt;br /&gt;
        if y then return&lt;br /&gt;
         string.format(&lt;br /&gt;
            table.concat(&lt;br /&gt;
                oj and (&lt;br /&gt;
                    om and (&lt;br /&gt;
                        oy and {-- GG AAAA İİİİ ([[GG AAAA]] [[İİİİ]])&lt;br /&gt;
                            oj,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[om],&amp;#039;&amp;amp;nbsp;&amp;#039;,oy,&lt;br /&gt;
                            &amp;#039;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;([[&amp;#039;,&lt;br /&gt;
                            j, &amp;#039; &amp;#039;, monthg[m],&amp;#039;]] &amp;#039;,Year0(y),&amp;#039;)&amp;#039;&lt;br /&gt;
                        } or {-- GG AAAA ([[FF AAAA]]) [[İİİİ]]&lt;br /&gt;
                            oj,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[om],&amp;#039; ([[&amp;#039;,j,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]]) &amp;#039;,Year0(y)&lt;br /&gt;
                        }&lt;br /&gt;
                    ) or {-- GG [[GG AAAA|(GG) AAAA]] [[İİİİ]]&lt;br /&gt;
                        oj,&amp;#039;&amp;amp;nbsp;[[&amp;#039;,j,&amp;#039; &amp;#039;,monthg[m],&amp;#039;|&amp;#039;,&amp;#039;(&amp;#039;,j,&amp;#039;)&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]] &amp;#039;,Year0(y)&lt;br /&gt;
                    }&lt;br /&gt;
                ) or {&amp;#039;[[&amp;#039;,j,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]]&amp;amp;nbsp;&amp;#039;,Year0(y)}&lt;br /&gt;
            ),--/table.concat&lt;br /&gt;
            ({[&amp;#039;Doğum&amp;#039;]=&amp;#039;bday&amp;#039;,[&amp;#039;Ölüm&amp;#039;]=&amp;#039;dday&amp;#039;})[mo] or &amp;#039;&amp;#039;,&lt;br /&gt;
            y,m,j&lt;br /&gt;
         )--/string.format&lt;br /&gt;
        else return&lt;br /&gt;
            &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039; .. table.concat(&lt;br /&gt;
                oj and (&lt;br /&gt;
                    om and {-- GG AAAA ([[GG AAAA]])&lt;br /&gt;
                            oj,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[om],&amp;#039; ([[&amp;#039;,j,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]])&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
                    } or {-- GG [[GG AAAA|(GG) AAAA]]&lt;br /&gt;
                        oj,&amp;#039;&amp;amp;nbsp;[[&amp;#039;,j,&amp;#039; &amp;#039;,monthg[m],&amp;#039;|&amp;#039;,&amp;#039;(&amp;#039;,j,&amp;#039;)&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]]&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
                    }&lt;br /&gt;
                ) or {&amp;#039;[[&amp;#039;,j,&amp;#039;&amp;amp;nbsp;&amp;#039;,monthg[m],&amp;#039;]]&amp;lt;/span&amp;gt;&amp;#039;}&lt;br /&gt;
            )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return y and string.format(&lt;br /&gt;
            &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;bday&amp;quot;&amp;gt;%04i&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
            Year0(y,&amp;#039;il&amp;#039;),y) or &amp;quot;&amp;#039;&amp;#039;format yanlışdır&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function GetDate(D)&lt;br /&gt;
    local d,m,y = d:match(&amp;#039;^%s*(%d%d?)[/.]([01]?%d)[/.](%-?%d+)&amp;#039;)&lt;br /&gt;
    if not d then y,m,d = D:match(&amp;#039;^%s*(%-?%d+)[-\\]0*(1?%d)[-\\]0*(%d+)&amp;#039;) end&lt;br /&gt;
    return tonumber(d),tonumber(m),tonumber(y)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Cmp(a,b)--İki tarixi müqayisə edir, buna uyğun olaraq nəticə -1, 0 və ya 1 &lt;br /&gt;
    local d1,m1,y1 = GetDate(a)&lt;br /&gt;
    local d2,m2,y2 = GetDate(b)&lt;br /&gt;
    return d1 and d2 and (--nil, əgər format tanınmayıbsa&lt;br /&gt;
        y1==y2 and (&lt;br /&gt;
            m1==m2 and (&lt;br /&gt;
                d1==d2 and 0 or d1&amp;lt;d2 and -1 or 1&lt;br /&gt;
            ) or m1&amp;lt;m2 and -1 or 1&lt;br /&gt;
        ) or y1&amp;lt;y2 and -1 or 1&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function Yyyymmdd(r)--Azərbaycanca tarixi YYYY,MM,DD formatına çevirir&lt;br /&gt;
    local d, m, y, M = mw.ustring.match(r, &amp;quot;^%s*(%d%d?)%s+([a-zA-Z]+)%s+(%d+)&amp;quot;)&lt;br /&gt;
    if not m then return nil end&lt;br /&gt;
    m = mw.ustring.lower(m)&lt;br /&gt;
&lt;br /&gt;
    --тупо перебор&lt;br /&gt;
    for i = 1, 12 do&lt;br /&gt;
    	if m == monthg[i] then&lt;br /&gt;
    		M = i&lt;br /&gt;
    		break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if not M then&lt;br /&gt;
    	return nil&lt;br /&gt;
	end&lt;br /&gt;
    return tonumber(y), M, tonumber(d)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
p = {&lt;br /&gt;
&lt;br /&gt;
ifdate=function(f)&lt;br /&gt;
 -- Arqumentlər şablona ötürülür &lt;br /&gt;
 return f:getParent().args[ mw.ustring.match(frame.args[1],&amp;quot;^[ %d.%-−%()]*$&amp;quot;) and 2 or 3 ]&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
DecodeDate = DecodeDate;&lt;br /&gt;
Diffy = Diffy;&lt;br /&gt;
Year0 = Year0;&lt;br /&gt;
GetDate = GetDate;&lt;br /&gt;
Cmp = Cmp;&lt;br /&gt;
Yyyymmdd = Yyyymmdd;&lt;br /&gt;
&lt;br /&gt;
diffy = function(f)&lt;br /&gt;
    local d1,m1,y1=DecodeDate(f.args[1]);&lt;br /&gt;
    local d0,m0,y0=DecodeDate(f.args[2])&lt;br /&gt;
    return Diffy(d1,m1,y1,d0,m0,y0)&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
monthg=function(f) return monthg[ f.args[1] or f:getParent().args[1] ] end;&lt;br /&gt;
&lt;br /&gt;
persdate=function(f)&lt;br /&gt;
 local frame=f:getParent();&lt;br /&gt;
 local catpref,mo,d,d2={[&amp;#039;Doğum&amp;#039;]=&amp;#039;Doğulanlar&amp;#039;,[&amp;#039;Ölüm&amp;#039;]=&amp;#039;Vəfat edənlər&amp;#039;}, frame.args[1],frame.args[2],frame.args[3]&lt;br /&gt;
 local cat, j,m,y,oj,om,oy,tail, j2,m2,y2, age = &amp;#039;&amp;#039;&lt;br /&gt;
 if d then&lt;br /&gt;
     j,m,y,oj,om,oy,tail=DecodeDate(d:gsub(&amp;#039;−&amp;#039;,&amp;#039;-&amp;#039;));&lt;br /&gt;
     if not (j or y) then&lt;br /&gt;
         return&lt;br /&gt;
     end&lt;br /&gt;
 end;&lt;br /&gt;
 if d2 then&lt;br /&gt;
     j2,m2,y2 = DecodeDate(d2:gsub(&amp;#039;−&amp;#039;,&amp;#039;-&amp;#039;));&lt;br /&gt;
 end;&lt;br /&gt;
 return table.concat{&lt;br /&gt;
     FormDate(j,m,y,oj,om,oy,mo),&lt;br /&gt;
     ( (frame.args[&amp;#039;nopersoncat&amp;#039;] or &amp;#039;&amp;#039;)~=&amp;#039;&amp;#039; or (f.args[&amp;#039;nocat&amp;#039;] or &amp;#039;&amp;#039;)~=&amp;#039;&amp;#039; ) and &amp;#039;&amp;#039; or table.concat{&lt;br /&gt;
         &amp;#039;[[Kateqoriya:Əlifba sırasına görə şəxslər]]&amp;#039;,&lt;br /&gt;
         j and string.format(&amp;#039;[[Category:%s %i %s]]&amp;#039;,catpref[mo],j,monthg[m]) or &amp;#039;&amp;#039;,&lt;br /&gt;
         y and string.format(&amp;#039;[[Category:%s %s]]&amp;#039;,catpref[mo],y,Year0(y,&amp;#039;ildə&amp;#039;)) or &amp;#039;&amp;#039;         &lt;br /&gt;
     },--/table.concat dax.&lt;br /&gt;
     (function(F)--yaş&lt;br /&gt;
         if not F then return &amp;#039;&amp;#039; end;&lt;br /&gt;
         local n=F();&lt;br /&gt;
         return n and string.format(&amp;quot; (%i %s)%s&amp;quot;,&lt;br /&gt;
             n,&lt;br /&gt;
             mw.getLanguage(&amp;#039;az&amp;#039;):plural(n,&amp;#039;il&amp;#039;,&amp;#039;il&amp;#039;,&amp;#039;il&amp;#039;),&lt;br /&gt;
             n&amp;gt;170 and &amp;#039;[[Category:Vikipediya:Yaşı yanlış göstərilən şəxslər]]&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
         ) or &amp;#039;&amp;#039;&lt;br /&gt;
     end)( ({&lt;br /&gt;
         [&amp;#039;Doğumlar&amp;#039;]=function()&lt;br /&gt;
             local now=os.date(&amp;#039;*t&amp;#039;);&lt;br /&gt;
             if (not d2 or d2==&amp;#039;&amp;#039;) and j and m and y then&lt;br /&gt;
                 return Diffy(now.day,now.month,now.year,j,m,y)&lt;br /&gt;
             end&lt;br /&gt;
         end,&lt;br /&gt;
         [&amp;#039;Ölümlər&amp;#039;]=function()&lt;br /&gt;
             return j and m and y and j2 and m2 and y2 and Diffy(j,m,y,j2,m2,y2);&lt;br /&gt;
         end,&lt;br /&gt;
     })[mo] ),&lt;br /&gt;
     tail or &amp;#039;&amp;#039;,&lt;br /&gt;
     cat&lt;br /&gt;
 }--/table.concat xar.&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
formdate=function(f) &lt;br /&gt;
    if (f.args[1] or &amp;#039;&amp;#039;)~=&amp;#039;&amp;#039; and (f.args[2] or &amp;#039;&amp;#039;)~=&amp;#039;&amp;#039; or (f.args[3] or &amp;#039;&amp;#039;)~=&amp;#039;&amp;#039; then&lt;br /&gt;
        return FormDate(f.args[1],f.args[2],f.args[3],f.args[4],f.args[5],f.args[6],f.args[&amp;#039;m&amp;#039;])&lt;br /&gt;
    else&lt;br /&gt;
        local tf=f:getParent();&lt;br /&gt;
        return FormDate(tf.args[1],tf.args[2],tf.args[3],tf.args[4],tf.args[5],tf.args[6],tf.args[&amp;#039;m&amp;#039;])&lt;br /&gt;
    end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
cmp=function(f)&lt;br /&gt;
    return Cmp(f.args[1],f.args[2])&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
G2J=function(f)&lt;br /&gt;
    local d,m,y=GetDate(f.args[1])&lt;br /&gt;
    if f.args[2] and Cmp(f.args[1],f.args[2])==1 then&lt;br /&gt;
        return string.format(&amp;quot;%i.%i.%i&amp;quot;,d,m,y)&lt;br /&gt;
    end&lt;br /&gt;
    local shift=math.floor(y/100)-math.floor(y/400)-2&lt;br /&gt;
    if d-shift&amp;gt;0 then&lt;br /&gt;
        return f.args[3] and string.format(&amp;quot;%i.%i.%i (%i)&amp;quot;,d,m,y,d-shift)&lt;br /&gt;
        or string.format(&amp;quot;%i.%i.%i&amp;quot;,d-shift,m,y)&lt;br /&gt;
    else&lt;br /&gt;
        if m==1 then&lt;br /&gt;
            return f.args[3]&lt;br /&gt;
            and string.format(&amp;quot;%i.1.%i (%i.12.%i)&amp;quot;,d,y,31+d-shift,y-1)&lt;br /&gt;
            or string.format(&amp;quot;%i.12.%i&amp;quot;,31+d-shift,y-1)&lt;br /&gt;
        elseif m==3 then&lt;br /&gt;
            return f.args[3] and string.format(&amp;quot;%i.3.%i (%i.2)&amp;quot;, d,y,&lt;br /&gt;
                (y%4==0 and 29 or 28)+d-shift-(y%100==0 and y%400~=0 and 1 or 0)&lt;br /&gt;
            )&lt;br /&gt;
            or string.format(&amp;quot;%i.2.%i&amp;quot;,&lt;br /&gt;
                (y%4==0 and 29 or 28)+d-shift-(y%100==0 and y%400~=0 and 1 or 0)&lt;br /&gt;
            ,y)&lt;br /&gt;
        else&lt;br /&gt;
            return f.args[3] and string.format(&lt;br /&gt;
                &amp;quot;%i.%i.%i (%i.%i)&amp;quot;, d,m,y, monthd[m-1]+d-shift,m-1&lt;br /&gt;
            )&lt;br /&gt;
            or string.format(&amp;quot;%i.%i.%i&amp;quot;,monthd[m-1]+d-shift,m-1,y)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
yyyymmdd = function(f)&lt;br /&gt;
    local date, hourmin = f.args[1]&lt;br /&gt;
    if mw.ustring.match(date, &amp;quot;^%s*%d+\-%d+\-%d+&amp;quot;) then&lt;br /&gt;
    	return date&lt;br /&gt;
	end&lt;br /&gt;
    hourmin = mw.ustring.match(date, &amp;quot;%s+%d+:%d+$&amp;quot;)&lt;br /&gt;
    local y, m, d = Yyyymmdd(date)&lt;br /&gt;
    if not y then&lt;br /&gt;
    	return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Xəta: yanlış tarix formatı.&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
    return string.format(&amp;#039;%4i-%02i-%02i&amp;#039;, y, m, d) .. (hourmin or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function table.val_to_str ( v )&lt;br /&gt;
  if &amp;quot;string&amp;quot; == type( v ) then&lt;br /&gt;
    v = string.gsub( v, &amp;quot;\n&amp;quot;, &amp;quot;\\n&amp;quot; )&lt;br /&gt;
    if string.match( string.gsub(v,&amp;quot;[^&amp;#039;\&amp;quot;]&amp;quot;,&amp;quot;&amp;quot;), &amp;#039;^&amp;quot;+$&amp;#039; ) then&lt;br /&gt;
      return &amp;quot;&amp;#039;&amp;quot; .. v .. &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;#039;&amp;quot;&amp;#039; .. string.gsub(v,&amp;#039;&amp;quot;&amp;#039;, &amp;#039;\\&amp;quot;&amp;#039; ) .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
  else&lt;br /&gt;
    return &amp;quot;table&amp;quot; == type( v ) and table.tostring( v ) or&lt;br /&gt;
      tostring( v )&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table.key_to_str ( k )&lt;br /&gt;
  if &amp;quot;string&amp;quot; == type( k ) and string.match( k, &amp;quot;^[_%a][_%a%d]*$&amp;quot; ) then&lt;br /&gt;
    return k&lt;br /&gt;
  else&lt;br /&gt;
    return &amp;quot;[&amp;quot; .. table.val_to_str( k ) .. &amp;quot;]&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function table.tostring( tbl )&lt;br /&gt;
  local result, done = {}, {}&lt;br /&gt;
  for k, v in ipairs( tbl ) do&lt;br /&gt;
    table.insert( result, table.val_to_str( v ) )&lt;br /&gt;
    done[ k ] = true&lt;br /&gt;
  end&lt;br /&gt;
  for k, v in pairs( tbl ) do&lt;br /&gt;
    if not done[ k ] then&lt;br /&gt;
      table.insert( result,&lt;br /&gt;
        table.key_to_str( k ) .. &amp;quot;=&amp;quot; .. table.val_to_str( v ) )&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
  return &amp;quot;{&amp;quot; .. table.concat( result, &amp;quot;,&amp;quot; ) .. &amp;quot;}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseISO8601Date(str)&lt;br /&gt;
	local pattern = &amp;quot;(%-?%d+)%-(%d+)%-(%d+)T&amp;quot;&lt;br /&gt;
	local Y, M, D = mw.ustring.match( str, pattern )&lt;br /&gt;
	return tonumber(Y), tonumber(M), tonumber(D)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseISO8601Time(str)&lt;br /&gt;
	local pattern = &amp;quot;T(%d+):(%d+):(%d+)%Z&amp;quot;&lt;br /&gt;
	local H, M, S = mw.ustring.match( str, pattern)&lt;br /&gt;
	return tonumber(H), tonumber(M), tonumber(S)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function parseISO8601Offset(str)&lt;br /&gt;
	if str:sub(-1)==&amp;quot;Z&amp;quot; then return 0,0 end -- ends with Z, Zulu time&lt;br /&gt;
&lt;br /&gt;
	-- matches ±hh:mm, ±hhmm or ±hh; else returns nils &lt;br /&gt;
	local pattern = &amp;quot;([-+])(%d%d):?(%d?%d?)$&amp;quot;&lt;br /&gt;
	local sign, oh, om = mw.ustring.match( str, pattern) &lt;br /&gt;
	sign, oh, om = sign or &amp;quot;+&amp;quot;, oh or &amp;quot;00&amp;quot;, om or &amp;quot;00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return tonumber(sign .. oh), tonumber(sign .. om)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parseISO8601(str)&lt;br /&gt;
	if &amp;#039;table&amp;#039;==type(str) then&lt;br /&gt;
		if str.args and str.args[1] then&lt;br /&gt;
			str = &amp;#039;&amp;#039; .. str.args[1]&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;unknown argument type: &amp;#039; .. type( str ) .. &amp;#039;: &amp;#039; .. table.tostring( str )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local Y,M,D = parseISO8601Date(str)&lt;br /&gt;
	local h,m,s = parseISO8601Time(str)&lt;br /&gt;
	local oh,om = parseISO8601Offset(str)&lt;br /&gt;
	return tonumber(os.time({year=Y, month=M, day=D, hour=(h+oh), min=(m+om), sec=s}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local g2uBoundary1 = p.parseISO8601(&amp;#039;1582-10-15T00:00:00Z&amp;#039;)&lt;br /&gt;
local g2uBoundary2 = p.parseISO8601(&amp;#039;1700-03-12T00:00:00Z&amp;#039;)&lt;br /&gt;
local g2uBoundary3 = p.parseISO8601(&amp;#039;1800-03-13T00:00:00Z&amp;#039;)&lt;br /&gt;
local g2uBoundary4 = p.parseISO8601(&amp;#039;1900-03-14T00:00:00Z&amp;#039;)&lt;br /&gt;
local g2uBoundary5 = p.parseISO8601(&amp;#039;1918-01-26T00:00:00Z&amp;#039;) -- декрет Ленина&lt;br /&gt;
&lt;br /&gt;
-- Передаваемое время обязано быть по Григорианскому календарю (новому стилю)&lt;br /&gt;
function p.formatWiki( time, infocardClass, categoryNamePrefix )&lt;br /&gt;
	if &amp;#039;table&amp;#039;==type( time ) then&lt;br /&gt;
		if time.args and time.args[1] then&lt;br /&gt;
			time = tonumber( time.args[1] )&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;unknown argument type: &amp;#039; .. type( time ) .. &amp;#039;: &amp;#039; .. table.tostring( time )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local t = os.date(&amp;quot;*t&amp;quot;, time)&lt;br /&gt;
	if time &amp;lt; g2uBoundary1 then&lt;br /&gt;
		return p.formatWikiImpl( t, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if t.year == 1700 and t.month == 3 and t.day == 11 then&lt;br /&gt;
		return p.formatWikiImpl( {year=1700, month=2, day=29}, t, infocardClass, categoryNamePrefix)&lt;br /&gt;
	end&lt;br /&gt;
	if t.year == 1800 and t.month == 3 and t.day == 12 then&lt;br /&gt;
		return p.formatWikiImpl( {year=1800, month=2, day=29}, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
	if t.year == 1900 and t.month == 3 and t.day == 13 then&lt;br /&gt;
		return p.formatWikiImpl( {year=1900, month=2, day=29}, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if g2uBoundary1 &amp;lt;= time and time &amp;lt; g2uBoundary2 then&lt;br /&gt;
		return p.formatWikiImpl( os.date(&amp;quot;*t&amp;quot;, time - 10 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
	if g2uBoundary2 &amp;lt;= time and time &amp;lt; g2uBoundary3 then&lt;br /&gt;
		return p.formatWikiImpl( os.date(&amp;quot;*t&amp;quot;, time - 11 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
	if g2uBoundary3 &amp;lt;= time and time &amp;lt; g2uBoundary4 then&lt;br /&gt;
		return p.formatWikiImpl( os.date(&amp;quot;*t&amp;quot;, time - 12 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
	if g2uBoundary4 &amp;lt;= time and time &amp;lt; g2uBoundary5 then&lt;br /&gt;
		return p.formatWikiImpl( os.date(&amp;quot;*t&amp;quot;, time - 13 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p.formatWikiImpl( t, t, infocardClass, categoryNamePrefix )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ternary ( cond , T , F )&lt;br /&gt;
    if cond then return T else return F end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local nominativeMonthes =  {&amp;#039;yanvar&amp;#039;, &amp;#039;fevral&amp;#039;, &amp;#039;mart&amp;#039;, &amp;#039;aprel&amp;#039;, &amp;#039;may&amp;#039;, &amp;#039;iyun&amp;#039;,&lt;br /&gt;
    &amp;#039;iyul&amp;#039;, &amp;#039;avqust&amp;#039;, &amp;quot;sentyabr&amp;quot;, &amp;quot;oktyabr&amp;quot;, &amp;quot;noyabr&amp;quot;, &amp;quot;dekabr&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
local genitivusMonthes =  {&amp;#039;yanvar&amp;#039;, &amp;#039;fevral&amp;#039;, &amp;#039;mart&amp;#039;, &amp;#039;aprel&amp;#039;, &amp;#039;may&amp;#039;, &amp;#039;iyun&amp;#039;,&lt;br /&gt;
    &amp;#039;iyul&amp;#039;, &amp;#039;avqust&amp;#039;, &amp;quot;sentyabr&amp;quot;, &amp;quot;oktyabr&amp;quot;, &amp;quot;noyabr&amp;quot;, &amp;quot;dekabr&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
local genitivusMonthes2 =  {&amp;#039;yanvarda&amp;#039;, &amp;#039;fevralda&amp;#039;, &amp;#039;martda&amp;#039;, &amp;#039;apreldə&amp;#039;, &amp;#039;mayda&amp;#039;, &amp;#039;iyunda&amp;#039;,&lt;br /&gt;
    &amp;#039;iyulda&amp;#039;, &amp;#039;avqustda&amp;#039;, &amp;quot;sentyabrda&amp;quot;, &amp;quot;oktyabrda&amp;quot;, &amp;quot;noyabrda&amp;quot;, &amp;quot;dekabrda&amp;quot;}  &lt;br /&gt;
    &lt;br /&gt;
local function nominativeYear( year )&lt;br /&gt;
    if ( year &amp;gt;= 0 ) then&lt;br /&gt;
        return &amp;#039;[[&amp;#039; .. year .. &amp;#039;|&amp;#039; .. year .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        return &amp;#039;[[e.ə. &amp;#039; .. ( 0 - year ) .. &amp;#039; |&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;eradan əvvəl&amp;quot;&amp;gt;e.ə.&amp;lt;/abbr&amp;gt; &amp;#039; .. ( 0 - year ) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatWikiImpl( t1, t2, infocardClass, categoryNamePrefix, leftBracket, rightBracket )&lt;br /&gt;
    local nd = t2.day;&lt;br /&gt;
    local nm = t2.month;&lt;br /&gt;
    local ny = t2.year;&lt;br /&gt;
    local od = ternary ( t1.day ~= t2.day , t1.day, nil );&lt;br /&gt;
    local om = ternary ( t1.month ~= t2.month , t1.month, nil );&lt;br /&gt;
    local oy = ternary ( t1.year ~= t2.year , t1.year, nil );&lt;br /&gt;
    &lt;br /&gt;
	if leftBracket == nil then&lt;br /&gt;
		leftBracket = &amp;#039;(&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if rightBracket == nil then&lt;br /&gt;
		rightBracket = &amp;#039;)&amp;#039;&lt;br /&gt;
	end &lt;br /&gt;
&lt;br /&gt;
	local JulianComment = function(s)&lt;br /&gt;
		return tostring(mw.html.create(&amp;quot;abbr&amp;quot;)&lt;br /&gt;
			:attr(&amp;quot;title&amp;quot;,&amp;quot;yuli təqvimi ilə&amp;quot;)&lt;br /&gt;
			:wikitext(s)&lt;br /&gt;
			:done())&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
    local template =&lt;br /&gt;
        (nd ~= nil and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;) .. (nm ~= nil and &amp;quot;2&amp;quot; or &amp;quot;&amp;quot;) .. (ny ~= nil and &amp;quot;3&amp;quot; or &amp;quot;&amp;quot;) ..&lt;br /&gt;
        (od ~= nil and &amp;quot;4&amp;quot; or &amp;quot;&amp;quot;) .. (om ~= nil and &amp;quot;5&amp;quot; or &amp;quot;&amp;quot;) .. (oy ~= nil and &amp;quot;6&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
    local datePart = &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
    if (template == &amp;quot;12&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s]]&amp;quot;,&lt;br /&gt;
        								nd, genitivusMonthes[nm] )&lt;br /&gt;
    elseif (template == &amp;quot;23&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%s]] %s&amp;quot;,&lt;br /&gt;
        								nominativeMonthes[nm], nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;3&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. nominativeYear( ny )&lt;br /&gt;
    elseif (template == &amp;quot;123&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. string.format( &amp;quot;[[%d %s]] %s&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;124&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. JulianComment(string.format( &amp;quot;%d&amp;quot;, od )&lt;br /&gt;
							).. string.format( &amp;quot; [[%d %s|&amp;quot; .. leftBracket .. &amp;quot;%d&amp;quot; .. rightBracket .. &amp;quot; %s]]&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], nd, genitivusMonthes[nm] )&lt;br /&gt;
    elseif (template == &amp;quot;1234&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. JulianComment(string.format( &amp;quot;%d&amp;quot;, od )&lt;br /&gt;
							).. string.format( &amp;quot; [[%d %s|&amp;quot; .. leftBracket .. &amp;quot;%d&amp;quot; .. rightBracket .. &amp;quot; %s]] %s&amp;quot;,&lt;br /&gt;
                                        nd, genitivusMonthes[nm], nd, genitivusMonthes[nm], nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;1245&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. JulianComment(string.format( &amp;quot;%d %s&amp;quot;, od, genitivusMonthes[om] )&lt;br /&gt;
							).. string.format(&amp;quot; &amp;quot; .. leftBracket .. &amp;quot;[[%d %s]]&amp;quot; .. rightBracket .. &amp;quot;&amp;quot;, nd, genitivusMonthes[nm] )										&lt;br /&gt;
    elseif (template == &amp;quot;12345&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. JulianComment(string.format( &amp;quot;%d %s&amp;quot;, od, genitivusMonthes[om] )&lt;br /&gt;
							).. string.format(&amp;quot; &amp;quot; .. leftBracket .. &amp;quot;[[%d %s]]&amp;quot; .. rightBracket .. &amp;quot; %s&amp;quot;, nd, genitivusMonthes[nm], nominativeYear( ny ) )&lt;br /&gt;
    elseif (template == &amp;quot;123456&amp;quot;) then&lt;br /&gt;
        datePart = datePart .. JulianComment(string.format( &amp;quot;%d %s %d&amp;quot;, od, genitivusMonthes[om], oy ))&lt;br /&gt;
							.. &amp;#039;&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
							.. string.format(&amp;quot; &amp;quot; .. leftBracket .. &amp;quot;[[%d %s]] %s&amp;quot; .. rightBracket , nd, genitivusMonthes[nm], nominativeYear( ny ) )&lt;br /&gt;
    else&lt;br /&gt;
        datePart = datePart .. &amp;#039;format yanlışdır&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    datePart = datePart .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
    local infocardTemplate =&lt;br /&gt;
        (nd ~= nil and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;) .. (nm ~= nil and &amp;quot;2&amp;quot; or &amp;quot;&amp;quot;) .. (ny ~= nil and &amp;quot;3&amp;quot; or &amp;quot;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
	if infocardClass then&lt;br /&gt;
	    if (infocardTemplate == &amp;quot;123&amp;quot;) then&lt;br /&gt;
	        datePart = datePart .. string.format(&amp;#039;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d-%02d-%02d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&amp;#039;, infocardClass , ny , nm , nd )&lt;br /&gt;
	    elseif (infocardTemplate == &amp;quot;23&amp;quot;) then&lt;br /&gt;
	        datePart = datePart .. string.format(&amp;#039;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d-%02d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&amp;#039;, infocardClass , ny , nm )&lt;br /&gt;
	    elseif (infocardTemplate == &amp;quot;3&amp;quot;) then&lt;br /&gt;
	        datePart = datePart .. string.format(&amp;#039;&amp;lt;span style=&amp;quot;display:none;&amp;quot;&amp;gt;(&amp;lt;span class=&amp;quot;%s&amp;quot;&amp;gt;%04d&amp;lt;/span&amp;gt;)&amp;lt;/span&amp;gt;&amp;#039;, infocardClass , ny )&lt;br /&gt;
	    end&lt;br /&gt;
	end&lt;br /&gt;
 &lt;br /&gt;
    if categoryNamePrefix then&lt;br /&gt;
        if ( nd ~= nil and nm ~= nil) then&lt;br /&gt;
            datePart = datePart .. &amp;#039;[[Kateqoriya:&amp;#039; .. nd .. &amp;#039; &amp;#039; .. genitivusMonthes2[nm] .. &amp;#039; &amp;#039; .. categoryNamePrefix .. &amp;#039;]]&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        if ( ny ~= nil) then&lt;br /&gt;
            datePart = datePart .. &amp;#039;[[Kateqoriya:&amp;#039; .. inYear( ny ) .. &amp;#039; ildə &amp;#039; .. categoryNamePrefix .. &amp;#039;]]&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    return datePart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Nemoralis</name></author>
	</entry>
</feed>