Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Modül:Dates

bullvar_katip

Administrator
Katılım
21 Mayıs 2024
Mesajlar
532,105
-- Bu modulda tarixlərlə işləmək üçün lazım olan funksiyalar toplanmışdır. local monthg = {'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', "Eylül", "Ekim", "Kasım", "Aralık"} local monthg2 = {'Ocakta', 'Şubatta', 'Martta', 'Nisanda', 'Mayısta', 'Haziranda', 'Temmuzda', 'Ağustosda', "Eylülde", "Ekimde", "Kasımda", "Aralıkta"} local monthd = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} local function DecodeDate(d) --tarix: "%-?%d+"=il, "%d+%.%d+"=ayın tarixi, "%d+%.%d+%.%-?%d+"=GAİ, local nd=d:match("^[%d.-]*"); local od=d:match("^[%d.-]*%s*%(%s*([%d.-]*)%s*%)"); local tail = d:match("^[%d.-]+%s*%(%s*[%d.-]+%s*%)%s*(%S.*)") or d:match("^[%d.-]+%s*([^%s%d].*)"); if nd:match('^%-?%d+$' ) then return nil, nil, tonumber(nd), nil, nil, od and tonumber(od:match("%-?%d+$")),tail else local j,m,y=nd:match("^(%d+)%.(%d+)%.?(%-?%d*)"); if j then if od then local oj, om, oy = od:match("^(%d+)%.?(%d*)%.?(%-?%d*)"); return j and tonumber(j), m and tonumber(m), y> and tonumber(y) or nil, oj and tonumber(oj), om> and tonumber(om) or nil, oy> and tonumber(oy) or nil, tail end return j and tonumber(j), m and tonumber(m), y> and tonumber(y) or nil, nil, nil, nil, tail else return nil end end end local function Diffy(d1,m1,y1,d0,m0,y0)--analog Kişi/Tarih/İl keçib return y1-y0 - ( y1*y0<=0 and 1 or 0 ) - ( (m1<m0 or m1==m0 and d1<d0) and 1 or 0 ) end local function Year0(y,t)-- analog Yıl0 if y>0 then return table.concat{ , tostring(y), '|', t and tostring(y)....t or tostring(y), } else return table.concat{ , tostring(-y), ' e.ə.|', t and tostring(-y)....t or tostring(-y), 'MÖ' } end end local function FormDate(j,m,y,oj,om,oy,mo)-- ~ Kişi/Tarih/Logic 4 if j then if not m then return "yanlış biçim" end if y then return string.format( table.concat( oj and ( om and ( oy and {-- GG AAAA İİİİ (GG AAAA İİİİ) oj,,monthg[om],,oy, '</span> ' } ) or {,j,,monthg[m],'</span>'} ) end else return y and string.format( , Year0(y,'yıl'),y) or "yanlış biçim" end end local function GetDate(D) local d,m,y = d:match('^%s*(%d%d?)[/.]([01]?%d)[/.](%-?%d+)') if not d then y,m,d = D:match('^%s*(%-?%d+)[-\\]0*(1?%d)[-\\]0*(%d+)') end return tonumber(d),tonumber(m),tonumber(y) end local function Cmp(a,b)--İki tarixi müqayisə edir, buna uyğun olaraq nəticə -1, 0 və ya 1 local d1,m1,y1 = GetDate(a) local d2,m2,y2 = GetDate(b) return d1 and d2 and (--nil, əgər format tanınMayısıbsa y1 y2 and ( m1 m2 and ( d1==d2 and 0 or d1<d2 and -1 or 1 ) or m1<m2 and -1 or 1 ) or y1<y2 and -1 or 1 ) end local function Yyyymmdd(r)--Azərbaycanca tarixi YYYY,MM,DD formatına çevirir local d, m, y, M = mw.ustring.match(r, "^%s*(%d%d?)%s+([а-яА-Я]+)%s+(%d+)") if not m then return nil end m = mw.ustring.lower(m) for i = 1, 12 do if m == monthg then M = i break end end if not M then return nil end return tonumber(y), M, tonumber(d) end local p = {} p = { ifdate=function(f) -- Arqumentlər şablona ötürülür return f:getParent.args[ mw.ustring.match(frame.args[1],"^[ %d.%-−%]*$") and 2 or 3 ] end; DecodeDate = DecodeDate; Diffy = Diffy; Year0 = Year0; GetDate = GetDate; Cmp = Cmp; Yyyymmdd = Yyyymmdd; diffy = function(f) local d1,m1,y1=DecodeDate(f.args[1]); local d0,m0,y0=DecodeDate(f.args[2]) return Diffy(d1,m1,y1,d0,m0,y0) end; monthg=function(f) return monthg[ f.args[1] or f:getParent.args[1] ] end; persdate=function(f) local frame=f:getParent; local catpref,mo,d,d2={['Doğum']='Doğumlular',['Ölüm']='Ölenler'}, frame.args[1],frame.args[2],frame.args[3] local cat, j,m,y,oj,om,oy,tail, j2,m2,y2, age = if d then j,m,y,oj,om,oy,tail=DecodeDate(d:gsub('−','-')); if not (j or y) then return end end; if d2 then j2,m2,y2 = DecodeDate(d2:gsub('−','-')); end; return table.concat{ FormDate(j,m,y,oj,om,oy,mo), ( (frame.args['nopersoncat'] or )~= or (f.args['nocat'] or )~= ) and or table.concat{ , j and string.format(,catpref[mo],j,monthg[m]) or , y and string.format(,catpref[mo],y,Year0(y,'ildə')) or },--/table.concat dax. (function(F)--yaş if not F then return end; local n=F; return n and string.format(" (%i %s)%s", n, mw.getLanguage('az'):plural(n,'yıl','yıl','yıl'), n>170 and or ) or end)( ({ ['Doğumlular']=function local now=os.date('*t'); if (not d2 or d2==) and j and m and y then return Diffy(now.day,now.month,now.year,j,m,y) end end, ['Ölümler']=function return j and m and y and j2 and m2 and y2 and Diffy(j,m,y,j2,m2,y2); end, })[mo] ), tail or , cat }--/table.concat xar. end; formdate=function(f) if (f.args[1] or )~= and (f.args[2] or )~= or (f.args[3] or )~= then return FormDate(f.args[1],f.args[2],f.args[3],f.args[4],f.args[5],f.args[6],f.args['m']) else local tf=f:getParent; return FormDate(tf.args[1],tf.args[2],tf.args[3],tf.args[4],tf.args[5],tf.args[6],tf.args['m']) end end; cmp=function(f) return Cmp(f.args[1],f.args[2]) end; G2J=function(f) local d,m,y=GetDate(f.args[1]) if f.args[2] and Cmp(f.args[1],f.args[2]) 1 then return string.format("%i.%i.%i",d,m,y) end local shift math.floor(y/100)-math.floor(y/400)-2 if d-shift>0 then return f.args[3] and string.format("%i.%i.%i (%i)",d,m,y,d-shift) or string.format("%i.%i.%i",d-shift,m,y) else if m 1 then return f.args[3] and string.format("%i.1.%i (%i.12.%i)",d,y,31+d-shift,y-1) or string.format("%i.12.%i",31+d-shift,y-1) elseif m 3 then return f.args[3] and string.format("%i.3.%i (%i.2)", d,y, (y%4 0 and 29 or 28)+d-shift-(y%100 0 and y%400~ 0 and 1 or 0) ) or string.format("%i.2.%i", (y%4 0 and 29 or 28)+d-shift-(y%100==0 and y%400~=0 and 1 or 0) ,y) else return f.args[3] and string.format( "%i.%i.%i (%i.%i)", d,m,y, monthd[m-1]+d-shift,m-1 ) or string.format("%i.%i.%i",monthd[m-1]+d-shift,m-1,y) end end end; yyyymmdd = function(f) local date, hourmin = f.args[1] if mw.ustring.match(date, "^%s*%d+\-%d+\-%d+") then return date end hourmin = mw.ustring.match(date, "%s+%d+:%d+$") local y, m, d = Yyyymmdd(date) if not y then return end return string.format('%4i-%02i-%02i', y, m, d) .. (hourmin or ) end } function table.val_to_str ( v ) if "string" type( v ) then v string.gsub( v, "\n", "\\n" ) if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then return "'" .. v .. "'" end return '"' .. string.gsub(v,'"', '\\"' ) .. '"' else return "table" type( v ) and table.tostring( v ) or tostring( v ) end end function table.key_to_str ( k ) if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then return k else return "[" .. table.val_to_str( k ) .. "]" end end function table.tostring( tbl ) local result, done = {}, {} for k, v in ipairs( tbl ) do table.insert( result, table.val_to_str( v ) ) done[ k ] = true end for k, v in pairs( tbl ) do if not done[ k ] then table.insert( result, table.key_to_str( k ) .. "=" .. table.val_to_str( v ) ) end end return "{" .. table.concat( result, "," ) .. "}" end local function parseISO8601Date(str) local pattern = "(%-?%d+)%-(%d+)%-(%d+)T" local Y, M, D = mw.ustring.match( str, pattern ) return tonumber(Y), tonumber(M), tonumber(D) end local function parseISO8601Time(str) local pattern = "T(%d+):(%d+):(%d+)%Z" local H, M, S = mw.ustring.match( str, pattern) return tonumber(H), tonumber(M), tonumber(S) end function parseISO8601Offset(str) if str:sub(-1)=="Z" then return 0,0 end -- ends with Z, Zulu time -- matches ±hh:mm, ±hhmm or ±hh; else returns nils local pattern = "([-+])(%d%d):?(%d?%d?)$" local sign, oh, om = mw.ustring.match( str, pattern) sign, oh, om = sign or "+", oh or "00", om or "00" return tonumber(sign .. oh), tonumber(sign .. om) end function p.parseISO8601(str) if 'table'==type(str) then if str.args and str.args[1] then str = .. str.args[1] else return 'unknown argument type: ' .. type( str ) .. ': ' .. table.tostring( str ) end end local Y,M,D = parseISO8601Date(str) local h,m,s = parseISO8601Time(str) local oh,om = parseISO8601Offset(str) return tonumber(os.time({year=Y, month=M, day=D, hour=(h+oh), min=(m+om), sec=s})) end local g2uBoundary1 = p.parseISO8601('1582-10-15T00:00:00Z') local g2uBoundary2 = p.parseISO8601('1700-03-12T00:00:00Z') local g2uBoundary3 = p.parseISO8601('1800-03-13T00:00:00Z') local g2uBoundary4 = p.parseISO8601('1900-03-14T00:00:00Z') local g2uBoundary5 = p.parseISO8601('1918-01-26T00:00:00Z') -- Передаваемое время обязано быть по Григорианскому календарю (новому стилю) function p.formatWiki( time, infocardClass, categoryNamePrefix ) if 'table' type( time ) then if time.args and time.args[1] then time tonumber( time.args[1] ) else return 'unknown argument type: ' .. type( time ) .. ': ' .. table.tostring( time ) end end local t os.date("*t", time) if time < g2uBoundary1 then return p.formatWikiImpl( t, t, infocardClass, categoryNamePrefix ) end if t.year 1700 and t.month 3 and t.day 11 then return p.formatWikiImpl( {year=1700, month=2, day=29}, t, infocardClass, categoryNamePrefix) end if t.year 1800 and t.month 3 and t.day 12 then return p.formatWikiImpl( {year 1800, month 2, day 29}, t, infocardClass, categoryNamePrefix ) end if t.year 1900 and t.month 3 and t.day 13 then return p.formatWikiImpl( {year=1900, month=2, day=29}, t, infocardClass, categoryNamePrefix ) end if g2uBoundary1 <= time and time < g2uBoundary2 then return p.formatWikiImpl( os.date("*t", time - 10 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix ) end if g2uBoundary2 <= time and time < g2uBoundary3 then return p.formatWikiImpl( os.date("*t", time - 11 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix ) end if g2uBoundary3 <= time and time < g2uBoundary4 then return p.formatWikiImpl( os.date("*t", time - 12 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix ) end if g2uBoundary4 <= time and time < g2uBoundary5 then return p.formatWikiImpl( os.date("*t", time - 13 * 24 * 60 * 60), t, infocardClass, categoryNamePrefix ) end return p.formatWikiImpl( t, t, infocardClass, categoryNamePrefix ) end local function ternary ( cond , T , F ) if cond then return T else return F end end local nominativeMonthes = {'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', "Eylül", "Ekim", "Kasım", "Aralık"} local genitivusMonthes = {'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', "Eylül", "Ekim", "Kasım", "Aralık"} local genitivusMonthes2 = {'Ocakda', 'Şubatda', 'Martda', 'Nisandə', 'Mayısda', 'Haziranda', 'Temmuzda', 'Ağustosda', "Eylülda", "Ekimda", "Kasımda", "Aralıkda"} local function nominativeYear( year ) if ( year >= 0 ) then return year else return 'MÖ ' .. ( 0 - year ) end end local function inYear( year ) if ( year >= 0 ) then return year else return 'MÖ' .. ( 0 - year) end end function p.formatWikiImpl( t1, t2, infocardClass, categoryNamePrefix, leftBracket, rightBracket ) local nd = t2.day; local nm = t2.month; local ny = t2.year; local od = ternary ( t1.day ~= t2.day , t1.day, nil ); local om = ternary ( t1.month ~= t2.month , t1.month, nil ); local oy = ternary ( t1.year ~= t2.year , t1.year, nil ); if leftBracket nil then leftBracket '(' end if rightBracket nil then rightBracket = ')' end local JulianComment = function(s) return tostring(mw.html.create("abbr") :attr("title","Jülyen takvimi") :wikitext(s) :done) end local template = (nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "") .. (od ~= nil and "4" or "") .. (om ~= nil and "5" or "") .. (oy ~= nil and "6" or "") local datePart = ' ' local infocardTemplate = (nd ~= nil and "1" or "") .. (nm ~= nil and "2" or "") .. (ny ~= nil and "3" or "") if infocardClass then if (infocardTemplate "123") then datePart datePart .. string.format(, infocardClass , ny , nm , nd ) elseif (infocardTemplate "23") then datePart = datePart .. string.format(, infocardClass , ny , nm ) elseif (infocardTemplate == "3") then datePart = datePart .. string.format(, infocardClass , ny ) end end if categoryNamePrefix then if ( nd ~= nil and nm ~= nil) then datePart = datePart --.. '[[Category:' .. nd .. ' ' .. genitivusMonthes[nm] .. ' ' .. categoryNamePrefix .. ']]' end if ( ny ~= nil) then datePart = datePart .. end end return datePart end return p
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Izgara yada normal mod

Temanızda forum listeleme yapısını ızgara yapısında yada normal yapıda listemek için kullanabilirsiniz.

Forum arkaplan resimleri

Forum arkaplanlarına eklenmiş olan resimlerinin kontrolü senin elinde, resimleri aç/kapat

Sidebar blogunu kapat/aç

Forumun kalabalığında kurtulmak için sidebar (kenar çubuğunu) açıp/kapatarak gereksiz kalabalıklardan kurtula bilirsiniz.

Yapışkan sidebar kapat/aç

Yapışkan sidebar ile sidebar alanını daha hızlı ve verimli kullanabilirsiniz.

Radius aç/kapat

Blok köşelerinde bulunan kıvrımları kapat/aç bu şekilde tarzını yansıt.

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Geri