Modul:DateTime: Unterschied zwischen den Versionen

Inhalt gelöscht Inhalt hinzugefügt
Die Seite wurde neu angelegt: „local DateTime = { serial = "2018-01-24", suite = "DateTime", item = 20652535 } -- Date and time objects loca…“
 
w>Jivee Blau
2020-09-30 - Administratoren-Anfrage: https://de.wikipedia.org/w/index.php?title=Wikipedia:Administratoren/Anfragen&diff=204106510&oldid=204105921
Zeile 1:
local DateTime = { serial = "20182020-0109-2430",
suite = "DateTime",
item = 20652535 } -- Date and time objects
-- Date and time objects
local Failsafe = DateTime
local GlobalMod = DateTime
local Calc = { }
local Meta = { }
Zeile 13 ⟶ 16:
months4 = { } }
local MaxYear = 2099
local Nbsp = mw.ustring.char( 160 )
local Tab = mw.ustring.char( 9 )
local Frame
DateTime.char = { nbsp = mw.ustring.char( 160 ),
tab = mw.ustring.char( 9 ) }
World.era = { en = { "BC", "AD" } }
World.monthsAbbr = { en = { n = 3 } }
Zeile 104 ⟶ 107:
HST = -1000 -- Hawaiian Standard Time
}
 
 
 
local foreignModule = function ( access, advanced, append, alt, alert )
-- Fetch global module
-- Precondition:
-- access -- string, with name of base module
-- advanced -- true, for require(); else mw.loadData()
-- append -- string, with subpage part, if any; or false
-- alt -- number, of wikidata item of root; or false
-- alert -- true, for throwing error on data problem
-- Postcondition:
-- Returns whatever, probably table
-- 2020-01-01
local storage = access
local fun, lucky, r
if advanced then
fun = require
else
fun = mw.loadData
end
if append then
storage = string.format( "%s/%s", storage, append )
end
lucky, r = pcall( fun, "Module:" .. storage )
if not lucky then
local suited
GlobalMod.globalModules = GlobalMod.globalModules or { }
suited = GlobalMod.globalModules[ access ]
if not suited and
type( alt ) == "number" and
alt > 0 then
suited = string.format( "Q%d", alt )
suited = mw.wikibase.getSitelink( suited )
GlobalMod.globalModules[ access ] = suited or true
end
if type( suited ) == "string" then
storage = suited
if append then
storage = string.format( "%s/%s", storage, append )
end
lucky, r = pcall( fun, storage )
end
if not lucky and alert then
error( "Missing or invalid page: " .. storage )
end
end
return r
end -- foreignModule()
 
 
Zeile 125 ⟶ 177:
-- Returns:
-- string, HTML span
returnlocal stringe = mw.formathtml.create( "<span class=\"error\">%s</span>", a )
:addClass( "error" )
:wikitext( a )
return tostring( e )
end -- fault()
 
Zeile 261 ⟶ 316:
end -- Meta.fiat()
setmetatable( DateTime, Meta.tableL )
DateTime.serial = nil
 
 
 
Zeile 328 ⟶ 382:
n = min + m
else -- dom
if adjust.month and adjust.year and n > 1 and
adjust.month >= 1 and
adjust.month <= 12 and
adjust.year > 1900 then
maxif =n Calc.months[> adjust.month0 ]then
if adjust.month = max = 2Calc.final( adjust and)
( adjust.yearwhile %n 4> ~=max 0 ordo
adjust.year % 400 =n = 0n )- thenmax
max = 28 if adjust.month < 12 then
end adjust.month = adjust.month + 1
if n <= max then else
max adjust.month = false1
adjust.year = adjust.year + 1
end
max = Calc.final( adjust )
end -- while n <= max
else
while n < 1 do
if adjust.month == 1 then
adjust.month = 12
adjust.year = adjust.year - 1
else
adjust.month = adjust.month - 1
end
max = Calc.final( adjust )
n = n + max
end -- while n < 1
end
end
if max then
m = n % 30
move = ( n - m ) / 30
n = 1 + m
end
end
end
 
end
adjust[ s ] = n
end
Zeile 355 ⟶ 418:
end -- for i
end -- Calc.fair()
 
 
 
Calc.final = function ( adjust )
-- Retrieve number of days in particular month
-- Parameter:
-- adjust -- table, with date specification
-- Returns:
-- number, of days in month
local r = Calc.months[ adjust.month ]
if adjust.month == 2 and
( adjust.year % 4 ~= 0 or
adjust.year % 400 == 0 ) then
r = 28
end
return r
end -- Calc.final()
 
 
Zeile 445 ⟶ 525:
if amount <= 4 then
r.year = tonumber( analyse )
elseif namount == 14 then
-- timestamp
r.year = tonumber( analyse:sub( 1, 4 ) )
r.month = tonumber( analyse:sub( 5, 2 6 ) )
r.dom = tonumber( analyse:sub( 7, 2 8 ) )
r.hour = tonumber( analyse:sub( 9, 210 ) )
r.min = tonumber( analyse:sub( 11, 212 ) )
r.sec = tonumber( analyse:sub( 13, 214 ) )
else
r = false
Zeile 673 ⟶ 753:
if rS:byte( 1, 1 ) == 45 then
local suffix
s = rS:match( "^%-([0120-3][0-9])" )
if s then
n = tonumber( s )
Zeile 747 ⟶ 827:
n = #s2
if n <= 2 and #s3 == 4 then
rO.dom = tonumber( ns2 )
rO.year = tonumber( s3 )
rO.dom2 = ( n == 2 )
Zeile 1.162 ⟶ 1.242:
-- analyse -- string to be interpreted
-- alien -- string with language code, or nil
-- add -- stringtable, with interval (PHP strtotime), or nil
-- Returns:
-- table, if parsed
Zeile 1.169 ⟶ 1.249:
local r
if type( analyse ) == "string" then
local strip = mw.ustring.char( 0x5B, 0x200E, 0x200F, 0x5D )
r = analyse:gsub( "&nbsp;", " " )
:gsub( "&#160;", " " )
:gsub( "&#x[aA]0;", " " )
:gsub( "&#32;", " " )
:gsub( NbspDateTime.char.nbsp, " " )
:gsub( TabDateTime.char.tab, " " )
:gsub( " +", " " )
:gsub( "%[%[", "" )
:gsub( "%]%]", "" )
:gsub( strip, "" )
r = mw.text.trim( r )
if r == "" then
r = { }
else
local slang = ( alien or "" )
local parser = { en = "GermanEnglish",
de = "GermanEnglish",
frr = "GermanEnglish",
nds = "GermanEnglish" }
local suitable
if slang == "" then
slang = "en"
Zeile 1.191 ⟶ 1.278:
end
end
slang = slang:lower()
if slangsuitable == "en" orparser[ slang == "de" then]
if suitable then
local l
l, r = pcall( Parser.GermanEnglish[ suitable ], r )
if l and r then
if not Prototypes.fair( r ) then
Zeile 1.201 ⟶ 1.289:
r = Prototypes.future( r, add )
end
else
r = "invalid format"
end
else
r = "unknown language: " .. slang
end
end
Zeile 1.211 ⟶ 1.301:
return r
end -- Private.fetch()
 
 
 
Private.field = function ( at, ask, adapt, atleast )
-- Format object as string
-- Parameter:
-- at -- DateTime
-- ask -- string, with format spec, or nil
-- adapt -- table, with options, or nil
-- .lang -- string, with particular language code
-- .london -- true: UTC output; default: local
-- .lonely -- true: permit lonely hour
-- atleast -- string, with default value, or nil
-- Returns:
-- string, or false, if invalid, or number for julian date
local r, spec
if type( ask ) == "string" then
if ask:sub( 1, 1 ) == "$" then
if ask:sub( 1, 11 ) == "$JulianDate" then
local luxury = ( ask:sub( -2 ) == ",$" )
if ask:sub( 1, 14 ) == "$JulianDateJul" then
at.legacy = true
elseif ask:sub( 1, 15 ) == "$JulianDateGreg" then
else
at.legacy = Private.former( at )
end
r = Private.fixed( at, luxury )
elseif ask:sub( 1, 11 ) == "$JulianCal$" then
adapt.legacy = true
spec = ask:sub( 12 )
elseif ask:sub( 1, 3 ) == "$\"$" then
r = ask:sub( 4 )
else
spec = ask
end
else
spec = ask
end
else
spec = false
end
if not r then
r = Private.format( at, spec, adapt )
end
return r or atleast
end -- Private.field()
 
 
 
Private.fixed = function ( at, advanced )
-- Compute julian date
-- Parameter:
-- at -- DateTime
-- .legacy -- true: at is in Julian calendar
-- advanced -- true: format long number
-- Returns:
-- number, or string
local mM, mMY, mY, nY, r
if at.year then
mY = at.year * 12
else -- actually invalid
mY = 0
end
if at.month then
mMY = at.month
else
mMY = 1
end
mMY = mMY + 57609
if at.dom then
r = at.dom
else
r = 1
end
mM = ( mY + mMY ) * 0.08333333333 -- divided by 12 months
nY = math.floor( mM - 1 )
r = math.floor( nY * 365.25 )
+ math.floor( ( mMY%12 + 4 ) * 30.6 )
+ r
if at.legacy then
r = r - 32205.5
else
r = r - math.floor( nY * 0.01 ) -- no leap day in century
+ math.floor( nY * 0.0025 ) -- but every 400 years
- 32167.5
end
if at.hour then -- divided by 24 hours per day
r = r + at.hour * 0.0416666666666667
else
r = r + 0.5
end
if at.min then -- divided by 1440 minutes per day
r = r + at.min * 0.000694444444
end
if at.sec then -- divided by 86400 seconds per day
r = r + at.min * 0.00001157407407
end
if at.bc then
r = 3442406 - r
if at.legacy then
r = r + 3
end
end
if advanced then
local slang = ( at.lang or World.slang )
local o = mw.language.new( slang )
r = o:formatNum( r )
end
return r
end -- Private.fixed()
 
 
Zeile 1.269 ⟶ 1.469:
-- Retrieve localization submodule
if not Meta.localized then
local l, d = pcallforeignModule( mwDateTime.loadDatasuite, "Module:DateTime/local" )
if l then false,
"local",
DateTime.item )
if type( d ) == "table" then
local wk
if d.slang then
Zeile 1.282 ⟶ 1.485:
for subk, subv in pairs( v ) do
wk[ subk ] = subv
end -- for k, v%s %s
else
World[ k ] = v
Zeile 1.291 ⟶ 1.494:
end
end -- Private.foreign()
 
 
 
Private.format = function ( at, ask, adapt )
-- Format object as string
-- Parameter:
-- at -- table, with numbers etc.
-- ask -- string, format spec, or nil
-- adapt -- table, with options, or nil
-- .lang -- string, with particular language code
-- .london -- true: UTC output; default: local
-- .lonely -- true: permit lonely hour
-- Returns:
-- string, or not
local slang = at.lang or "en"
local opts = { lang = slang }
local babel, r
if type( adapt ) == "table" then
if type( adapt.lang ) == "string" then
local i = adapt.lang:find( "-", 3, true )
if i then
slang = adapt.lang:lower()
opts.lang = slang:sub( 1, i - 1 )
else
opts.lang = adapt.lang:lower()
end
end
opts.london = adapt.london
opts.lonely = adapt.lonely
end
babel = mw.language.new( opts.lang:lower() )
if babel then
local shift, show, stamp, suffix, limit4, locally
if at.month then
stamp = World.monthsLong.en[ at.month ]
if at.year then
stamp = string.format( "%s %04d", stamp, at.year )
end
if at.dom then
stamp = string.format( "%d %s", at.dom, stamp )
end
if ask and ask:find( "Mon4", 1, true ) then
local mon4 = World.months4[ opts.lang:lower() ]
if mon4 and mon4[ at.month ] then
limit4 = true
end
end
elseif at.year then
stamp = string.format( "%04d", at.year )
end
if at.hour then
if stamp then
stamp = stamp .. " "
else
stamp = ""
end
stamp = string.format( "%s%02d:", stamp, at.hour )
if at.min then
stamp = string.format( "%s%02d", stamp, at.min )
if at.sec then
stamp = string.format( "%s:%02d",
stamp, at.sec )
if at.msec then
stamp = string.format( "%s.%03d",
stamp, at.msec )
if at.mysec then
stamp = string.format( "%s%03d",
stamp,
at.mysec )
end
end
end
else
stamp = stamp .. "00"
end
if at.zone then
stamp = stamp .. World.zones.formatter( at, "+-" )
end
end
show, suffix = World.templates.formatter( at, ask, opts )
if limit4 then
show = show:gsub( "M", "F" )
end
if type( opts.london ) == "boolean" then
locally = not opts.london
else
locally = true
end
r = babel:formatDate( show, stamp, locally )
r = r:gsub( "&#160;$", "" )
if at.year and at.year < 1000 then
r = r:gsub( string.format( "%04d", at.year ),
tostring( at.year ) )
end
if at.month then
local bucket, m, suite, x
if show:find( "F", 1, true ) then
suite = "monthsLong"
elseif show:find( "M", 1, true ) then
suite = "monthsAbbr"
end
bucket = World[ suite ]
if bucket then
m = bucket[ opts.lang:lower() ]
if slang then
x = bucket[ slang:lower() ]
end
if m then
local base = m[ at.month ]
local ex
if x then
ex = x[ at.month ]
end
if suite == "monthsAbbr" then
local stop
if ex then
stop = x.suffix
base = ex
else
stop = m.suffix
end
if base and stop then
local shift, std
std = string.format( "%s%%%s",
base[ 1 ], stop )
shift = string.format( "%s%s",
base[ 2 ], stop )
r = mw.ustring.gsub( r, std, shift )
end
elseif suite == "monthsLong" then
if base and ex then
r = mw.ustring.gsub( r, base, ex )
end
end
end
end
end
if suffix then
r = r .. suffix
end
end
return r
end -- Private.format()
 
 
 
Private.former = function ( at )
-- Analyze whether Julian calendar
-- Parameter:
-- at -- table, to be evaluated
-- Returns:
-- true, i
local r
if at.year then
if at.year < 1582 then
r = true
elseif at.year == 1582 then
if at.month then
if at.month < 10 then
r = true
elseif at.month == 10 then
r = ( at.dom <= 15 )
end
end
end
end
return r
end -- Private.former()
 
 
Zeile 1.325 ⟶ 1.696:
-- add -- string or number, to be added
-- Returns:
-- stringtable, with shift, or false/nil
local r
if add then
Zeile 1.332 ⟶ 1.703:
r = tonumber( add )
s = "number"
else
r = add
end
if s == "number" then
Zeile 1.339 ⟶ 1.708:
r = false
else
r = string.format( "%d second", r or add )
end
elseif s ~== "string" then
r = add
else
r = false
end
Zeile 1.363 ⟶ 1.734:
return r
end -- Prototypes.clone()
 
 
 
Prototypes.failsafe = function ( self, atleast )
-- Retrieve versioning and check for compliance
-- Precondition:
-- self -- table, or not, with DateTime object, unused
-- atleast -- string, with required version
-- or "wikidata" or "~" or "@" or false
-- Postcondition:
-- Returns string -- with queried version/item, also if problem
-- false -- if appropriate
-- 2020-08-17
local since = atleast
local last = ( since == "~" )
local linked = ( since == "@" )
local link = ( since == "item" )
local r
if last or link or linked or since == "wikidata" then
local item = Meta.item
since = false
if type( item ) == "number" and item > 0 then
local suited = string.format( "Q%d", item )
if linkedlink then
r = suited
else
local entity = mw.wikibase.getEntity( suited )
if type( entity ) == "table" then
local seek = Failsafe.serialProperty or "P348"
local vsn = entity:formatPropertyValues( seek )
if type( vsn ) == "table" and
type( vsn.value ) == "string" and
vsn.value ~= "" then
if last and
vsn.value == ( Meta.serial or
DateTime.serial ) then
r = false
elseif linked then
if mw.title.getCurrentTitle().prefixedText
== mw.wikibase.getSitelink( suited ) then
r = false
else
r = suited
end
else
r = vsn.value
end
if last then
r = false
else
r = vsn.value
end
end
end
end
end
end
if type( r ) == "nil" then
if not since or since <= Meta.serial then
r = Meta.serial
else
r = false
end
end
return r
end -- Prototypes.failsafe()
 
 
Zeile 1.413 ⟶ 1.850:
return ret
end -- fNum()
if self.bc then
defs.year.max = 999999
end
defs.dom.f =
function ()
Zeile 1.583 ⟶ 2.023:
return r
end -- Prototypes.first()
 
 
 
Prototypes.fix = function ( self )
-- Adapt this object to local time if no explicit zone given
-- Parameter:
-- self -- table, with numbers etc.
if type( self ) == "table" and
not self.zone then
local seconds = Prototypes.format( self, "Z" )
Prototypes.future( self, - tonumber( seconds ) )
end
end -- Prototypes.fix()
 
 
Zeile 1.652 ⟶ 2.105:
-- self -- table, with numbers etc.
-- ask -- string, format spec, or nil
-- table, with multiple formats
-- string may contain multiple formats joined by "|||"
-- adapt -- table, with options, or nil
-- .lang -- string, with particular language code
Zeile 1.657 ⟶ 2.112:
-- .lonely -- true: permit lonely hour
-- Returns:
-- string, or false, if invalid, or number for julian date
local r = false
if type( self ) == "table" then
local opts s = { lang =type( self.langask })
local babel, slangpoly
if type( adapt )s == "tablestring" and ask:find( "|||", 1, true ) then
ifpoly type(= adaptmw.langtext.split( ) ==ask, "string|||" then)
elseif local is = adapt.lang:find(= "-table", 3, true )then
poly = if i thenask
slang = adapt.lang:lower()
opts.lang = slang:sub( 1, i - 1 )
else
opts.lang = adapt.lang:lower()
end
end
opts.london = adapt.london
opts.lonely = adapt.lonely
end
babelif =poly mw.language.new( opts.lang )then
if babel then r = ""
localfor shift,i show,= stamp1, suffix, limit4,#poly locallydo
if self r = r .month. Private.field( self, poly[ i ], adapt then)
end -- for stamp = World.monthsLong.en[ self.month ]i
if self.year thenelse
stampr = stringPrivate.formatfield( "%s %04d"self, stampask, self.yearadapt )
end
if self.dom then
stamp = string.format( "%d %s", self.dom, stamp )
end
if ask and ask:find( "Mon4" ) then
local mon4 = World.months4[ opts.lang ]
if mon4 then
if mon4[ self.month ] then
limit4 = true
end
end
end
elseif self.year then
stamp = string.format( "%04d", self.year )
end
if self.hour then
stamp = string.format( "%s %02d:", stamp, self.hour )
if self.min then
stamp = string.format( "%s%02d", stamp, self.min )
if self.sec then
stamp = string.format( "%s:%02d",
stamp, self.sec )
if self.msec then
stamp = string.format( "%s.%03d",
stamp, self.msec )
if self.mysec then
stamp = string.format( "%s%03d",
stamp,
self.mysec )
end
end
end
else
stamp = stamp .. "00"
end
if self.zone then
stamp = stamp .. World.zones.formatter( self, "+-" )
end
end
show, suffix = World.templates.formatter( self, ask, opts )
if limit4 then
show = show:gsub( "M", "F" )
end
if type( opts.london ) == "boolean" then
locally = not opts.london
else
locally = true
end
r = babel:formatDate( show, stamp, locally )
r = r:gsub( "&#160;$", "" )
if self.year and self.year < 1000 then
r = r:gsub( string.format( "%04d", self.year ),
tostring( self.year ) )
end
if self.month then
local bucket, m, suite, x
if show:find( "F" ) then
suite = "monthsLong"
elseif show:find( "M" ) then
suite = "monthsAbbr"
end
bucket = World[ suite ]
if bucket then
m = bucket[ opts.lang ]
if slang then
x = bucket[ slang ]
end
if m then
local base = m[ self.month ]
local ex
if x then
ex = x[ self.month ]
end
if suite == "monthsAbbr" then
local stop
if ex then
stop = x.suffix
base = ex
else
stop = m.suffix
end
if base and stop then
local shift, std
std = string.format( "%s%%%s",
base[ 1 ], stop )
shift = string.format( "%s%s",
base[ 2 ], stop )
r = mw.ustring.gsub( r, std, shift )
end
elseif suite == "monthsLong" then
if base and ex then
r = mw.ustring.gsub( r, base, ex )
end
end
end
end
end
if suffix then
r = r .. suffix
end
end
end
return r or false
end -- Prototypes.format()
 
Zeile 1.827 ⟶ 2.174:
end
if r then
raw =if r[ Meta.signature ] then
rel raw = Private.future(r[ shiftMeta.signature )]
else
raw = r
end
if type( shift ) == "table" then
rel = shift
else
rel = Private.future( shift )
end
end
if raw and rel then
Zeile 1.852 ⟶ 2.207:
-- Returns:
-- string
local dels = { false, "", "-", "-", "", ":", ":", ".:", ".", "" }
local wids = { false, 4, 2, 2, 2, 2, 2, 2, 3, 3 }
local s = ""
local n, r, spec
Zeile 1.864 ⟶ 2.219:
end
end -- f()
for i = 2, 45 do
f( i )
end -- for i
r = s
s = ""
for i = 56, 10 do
f( i )
end -- for i
Zeile 1.879 ⟶ 2.234:
else
r = string.format( "%sT%s", r, s )
end
end
r = r:gsub( "%.$", "" )
if self.bc then
if self.year then
r = "-" .. r
else
r = r .. " BC"
end
end
Zeile 1.950 ⟶ 2.313:
if not ask or ask == "" then
r1 = "c"
elseif ask == "*" then
if World.present then
if assigned.hour then
if assigned.dom or assigned.month or assigned.year then
if World.present.both and
World.present.date and
World.present.time then
r1 = World.present.both
:gsub( "$date", World.present.date )
:gsub( "$time", World.present.time )
else
r1 = World.present.date
end
end
r1 = r1 or World.present.time
else
r1 = World.present.date
end
end
r1 = r1 or "c"
else
local template = World.templates[ ask ]
Zeile 1.958 ⟶ 2.341:
if tmp then
template = tmp[ ask ]
end
if not template then
local i = slang:find( "-", 3, true )
if i then
slang = slang:sub( 1, i - 1 ):lower()
tmp = World.templates[ slang ]
if tmp then
template = tmp[ ask ]
end
end
end
end
Zeile 1.979 ⟶ 2.372:
end
if template.lift and
( assigned.dom or
not ( assigned.month or assigned.year or assigned.bc )
) then
local stamp = false
Zeile 2.003 ⟶ 2.396:
end
end
if low or ask:find( "hh:mm:ss", 1, true ) then
if stamp then
r1 = string.format( "%s %s", r1, stamp )
end
elseif ask:find( "hh:mm", 1, true ) and
stamp and
#stamp > 3 then
r1 = string.format( "%s H:i", r1 )
end
if stamp then
Zeile 2.059 ⟶ 2.456:
if #s == 1 then
-- "YXWVUTSRQPONZABCDEFGHIKLM"
move = World.zones[ "!" ]:find( s, 1, true )
if move then
move = ( move - 13 ) * 100
Zeile 2.074 ⟶ 2.471:
if tmp then
code = tmp[ s ]
end
if not code and
slang ~= "en" and
World.zones.en then
code = World.zones.en[ s ]
end
end
Zeile 2.130 ⟶ 2.532:
local p = { }
 
function p.test = function ( args, alien )
local slang = args.lang or alien
local obj = Meta.fiat( args[ 1 ], false, args.shift )
local r
Zeile 2.147 ⟶ 2.549:
r = ( args.noerror or "0" )
if r == "0" then
r = fault( "Format nicht erkanntinvalid" )
else
r = ""
end
if args.errCat then
local cats = mw.text.split( args.errCat, "%s*|%s*" )
for i = 1, #cats do
r = string.format( "%s[[Category:%s]]", r, cats[ i ] )
end -- for i
end
end
Zeile 2.157 ⟶ 2.565:
 
 
function p.failsafe = function ( frame )
local s = type( frame )
local r, since
Zeile 2.168 ⟶ 2.576:
end
end
ifreturn Prototypes.failsafe( false, since ==) or "wikidata" then
local item = DateTime.item
since = false
if type( item ) == "number" and item > 0 then
local entity = mw.wikibase.getEntity( string.format( "Q%d",
item ) )
if type( entity ) == "table" then
local vsn = entity:formatPropertyValues( "P348" )
if type( vsn ) == "table" and
type( vsn.value) == "string" and
vsn.value ~= "" then
r = vsn.value
end
end
end
end
if since then
if since > Meta.serial then
r = ""
else
r = Meta.serial
end
elseif not r then
r = Meta.serial
end
return r
end -- p.failsafe
 
 
 
function p.format = function ( frame )
-- 1 -- stamp
-- 2 -- spec
Zeile 2.208 ⟶ 2.591:
frame.args[ 2 ],
shift = frame.args.shift,
noerror = frame.args.noerror },
errCat = frame.args.errCat }
if not v[ 1 ] or v[ 1 ] == "now" then
v[ 1 ] = frame:callParserFunction( "#timel", "c", v.shift )
Zeile 2.223 ⟶ 2.607:
 
 
function p.lt = function ( frame )
return Templates.flow( frame, "lt" )
end -- p.lt
function p.le = function ( frame )
return Templates.flow( frame, "le" )
end -- p.le
function p.eq = function ( frame )
return Templates.flow( frame, "eq" )
end -- p.eq
function p.ne = function ( frame )
return Templates.flow( frame, "ne" )
end -- p.ne
function p.ge = function ( frame )
return Templates.flow( frame, "ge" )
end -- p.ge
function p.gt = function ( frame )
return Templates.flow( frame, "gt" )
end -- p.gt