Bearbeiten von „Modul:DateTime

Zur Navigation springen Zur Suche springen
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden. Ein eigenes Benutzerkonto hat eine ganze Reihe von Vorteilen.

Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

Aktuelle Version Dein Text
Zeile 1: Zeile 1:
local DateTime  = { serial = "2020-04-08",
local DateTime  = { serial = "2017-04-29",
                     suite  = "DateTime",
                     suite  = "DateTime" }   -- Date and time objects
                    item  = 20652535 }
-- Date and time objects
local Failsafe  = DateTime
local GlobalMod  = DateTime
local Calc      = { }
local Calc      = { }
local Meta      = { }
local Meta      = { }
Zeile 107: Zeile 103:
     HST  = -1000    -- Hawaiian Standard Time
     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
    -- 2019-10-20
    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, 0 )
        end
    end
    return r
end -- foreignModule()




Zeile 177: Zeile 124:
     -- Returns:
     -- Returns:
     --    string, HTML span
     --    string, HTML span
     local e = mw.html.create( "span" )
     return string.format( "<span class=\"error\">%s</span>", a )
                    :addClass( "error" )
                    :wikitext( a )
    return tostring( e )
end -- fault()
end -- fault()


Zeile 383: Zeile 327:
                         n    = min + m
                         n    = min + m
                     else    -- dom
                     else    -- dom
                         if adjust.month and adjust.year  and
                         if adjust.month and adjust.year and  n > 1 and
                           adjust.month >= 1  and
                           adjust.month >= 1  and
                           adjust.month <= 12 and
                           adjust.month <= 12 and
                           adjust.year > 1900 then
                           adjust.year > 1900 then
                             if n > 0 then
                             max = Calc.months[ adjust.month ]
                                max = Calc.final( adjust )
                            if adjust.month == 2  and
                                while n > max do
                              ( adjust.year % 4 ~= 0  or
                                    n = n - max
                                adjust.year % 400 == 0 ) then
                                    if adjust.month < 12 then
                                 max = 28
                                        adjust.month = adjust.month + 1
                             end
                                    else
                            if n <= max then
                                        adjust.month = 1
                                max = false
                                        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
                         end
                         end
                        if max then
                            m    = n % 30
                            move = ( n - m )  /  30
                            n    = 1 + m
                        end
                    end
                     end
                     end
                end
                 adjust[ s ] = n
                 adjust[ s ] = n
             end
             end
Zeile 419: Zeile 354:
     end -- for i
     end -- for i
end -- Calc.fair()
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 526: Zeile 444:
         if amount <= 4 then
         if amount <= 4 then
             r.year = tonumber( analyse )
             r.year = tonumber( analyse )
         elseif amount == 14 then
         elseif n == 14 then
             -- timestamp
             -- timestamp
             r.year  = tonumber( analyse:sub(  1, 4 ) )
             r.year  = tonumber( analyse:sub(  1, 4 ) )
             r.month  = tonumber( analyse:sub(  5, 6 ) )
             r.month  = tonumber( analyse:sub(  5, 2 ) )
             r.dom    = tonumber( analyse:sub(  7, 8 ) )
             r.dom    = tonumber( analyse:sub(  7, 2 ) )
             r.hour  = tonumber( analyse:sub(  9, 10 ) )
             r.hour  = tonumber( analyse:sub(  9, 2 ) )
             r.min    = tonumber( analyse:sub( 11, 12 ) )
             r.min    = tonumber( analyse:sub( 11, 2 ) )
             r.sec    = tonumber( analyse:sub( 13, 14 ) )
             r.sec    = tonumber( analyse:sub( 13, 2 ) )
         else
         else
             r = false
             r = false
Zeile 828: Zeile 746:
                         n = #s2
                         n = #s2
                         if n <= 2  and  #s3 == 4 then
                         if n <= 2  and  #s3 == 4 then
                             rO.dom  = tonumber( s2 )
                             rO.dom  = tonumber( n )
                             rO.year = tonumber( s3 )
                             rO.year = tonumber( s3 )
                             rO.dom2 = ( n == 2 )
                             rO.dom2 = ( n == 2 )
Zeile 1.243: Zeile 1.161:
     --    analyse  -- string to be interpreted
     --    analyse  -- string to be interpreted
     --    alien    -- string with language code, or nil
     --    alien    -- string with language code, or nil
     --    add      -- table, with interval, or nil
     --    add      -- string, with interval (PHP strtotime), or nil
     -- Returns:
     -- Returns:
     --    table, if parsed
     --    table, if parsed
Zeile 1.250: Zeile 1.168:
     local r
     local r
     if type( analyse ) == "string" then
     if type( analyse ) == "string" then
        local strip = mw.ustring.char( 0x5B, 0x200E, 0x200F, 0x5D )
         r =  analyse:gsub( "&nbsp;", " " )
         r =  analyse:gsub( "&nbsp;", " " )
                     :gsub( "&#160;", " " )
                     :gsub( "&#160;", " " )
Zeile 1.260: Zeile 1.177:
                     :gsub( "%[%[", "" )
                     :gsub( "%[%[", "" )
                     :gsub( "%]%]", "" )
                     :gsub( "%]%]", "" )
                    :gsub( strip, "" )
         r = mw.text.trim( r )
         r = mw.text.trim( r )
         if r == "" then
         if r == "" then
             r = { }
             r = { }
         else
         else
             local slang = ( alien or "" )
             local slang = ( alien or "" )
            local parser = { en  = "GermanEnglish",
                            de  = "GermanEnglish",
                            frr = "GermanEnglish",
                            nds = "GermanEnglish" }
            local suitable
             if slang == "" then
             if slang == "" then
                 slang = "en"
                 slang = "en"
Zeile 1.279: Zeile 1.190:
                 end
                 end
             end
             end
             slang   = slang:lower()
             slang = slang:lower()
             suitable = parser[ slang ]
             if slang == "en" or slang == "de" then
            if suitable then
                 local l
                 local l
                 l, r = pcall( Parser[ suitable ], r )
                 l, r = pcall( Parser.GermanEnglish, r )
                 if l and r then
                 if l and r then
                     if not Prototypes.fair( r ) then
                     if not Prototypes.fair( r ) then
Zeile 1.290: Zeile 1.200:
                         r = Prototypes.future( r, add )
                         r = Prototypes.future( r, add )
                     end
                     end
                else
                    r = "invalid format"
                 end
                 end
             else
             else
                 r = "unknown language: " .. slang
                 r = "unknown language"
             end
             end
         end
         end
Zeile 1.360: Zeile 1.268:
     -- Retrieve localization submodule
     -- Retrieve localization submodule
     if not Meta.localized then
     if not Meta.localized then
         local d = foreignModule( DateTime.suite,
         local l, d = pcall( mw.loadData, "Module:DateTime/local" )
                                false,
         if l then
                                "local",
                                DateTime.item )
         if type( d ) == "table" then
             local wk
             local wk
             if d.slang then
             if d.slang then
Zeile 1.376: Zeile 1.281:
                     for subk, subv in pairs( v ) do
                     for subk, subv in pairs( v ) do
                         wk[ subk ] = subv
                         wk[ subk ] = subv
                     end -- for k, v
                     end -- for k, v%s %s
                 else
                 else
                     World[ k ] = v
                     World[ k ] = v
Zeile 1.419: Zeile 1.324:
     --    add  -- string or number, to be added
     --    add  -- string or number, to be added
     -- Returns:
     -- Returns:
     --    table, with shift, or false/nil
     --    string, with shift, or false/nil
     local r
     local r
     if add then
     if add then
Zeile 1.426: Zeile 1.331:
             r = tonumber( add )
             r = tonumber( add )
             s = "number"
             s = "number"
        else
            r = add
         end
         end
         if s == "number" then
         if s == "number" then
Zeile 1.431: Zeile 1.338:
                 r = false
                 r = false
             else
             else
                 r = string.format( "%d second", r or add )
                 r = string.format( "%d second", r )
             end
             end
         elseif s == "string" then
         elseif s ~= "string" then
            r = add
             r = false
        else
             r = false
         end
         end
         if r then
         if r then
Zeile 1.457: Zeile 1.362:
     return r
     return r
end -- Prototypes.clone()
end -- Prototypes.clone()
Prototypes.failsafe = function ( self, atleast )
    -- Retrieve versioning and check for compliance
    -- Precondition:
    --    atleast  -- string, with required version or "wikidata" or "~"
    --                or false
    -- Postcondition:
    --    Returns  string  -- with queried version, also if problem
    --              false  -- if appropriate
    local last  = ( atleast == "~" )
    local since = atleast
    local r
    if last  or  since == "wikidata" then
        local item = Meta.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 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
                    else
                        r = vsn.value
                    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.580: Zeile 1.440:
                                 end
                                 end
                                 if d == 29  and  m == 2  and  y then
                                 if d == 29  and  m == 2  and  y then
                                     if y % 4 ~= 0   or
                                     if y % 4 ~= 0 or  y % 400 == 0 then
                                      ( y % 100 == 0 and
                                        y % 400 ~= 0 ) then
                                         ret = false
                                         ret = false
                                     end
                                     end
Zeile 1.722: Zeile 1.580:
     return r
     return r
end -- Prototypes.first()
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.812: Zeile 1.657:
     local r = false
     local r = false
     if type( self ) == "table" then
     if type( self ) == "table" then
        local slang = self.lang or "en"
         local opts  = { lang = self.lang }
         local opts  = { lang = slang }
         local babel, slang
         local babel
         if type( adapt ) == "table" then
         if type( adapt ) == "table" then
             if type( adapt.lang ) == "string" then
             if type( adapt.lang ) == "string" then
Zeile 1.825: Zeile 1.669:
                 end
                 end
             end
             end
            opts.lang  = opts.lang
             opts.london = adapt.london
             opts.london = adapt.london
             opts.lonely = adapt.lonely
             opts.lonely = adapt.lonely
         end
         end
         babel = mw.language.new( opts.lang:lower() )
         babel = mw.language.new( opts.lang )
         if babel then
         if babel then
             local shift, show, stamp, suffix, limit4, locally
             local shift, show, stamp, suffix, limit4, locally
Zeile 1.839: Zeile 1.684:
                     stamp = string.format( "%d %s", self.dom, stamp )
                     stamp = string.format( "%d %s", self.dom, stamp )
                 end
                 end
                 if ask and ask:find( "Mon4", 1, true ) then
                 if ask and ask:find( "Mon4" ) then
                     local mon4 = World.months4[ opts.lang:lower() ]
                     local mon4 = World.months4[ opts.lang ]
                     if mon4 and  mon4[ self.month ] then
                     if mon4 then
                        limit4 = true
                        if mon4[ self.month ] then
                            limit4 = true
                        end
                     end
                     end
                 end
                 end
Zeile 1.849: Zeile 1.696:
             end
             end
             if self.hour then
             if self.hour then
                if stamp then
                 stamp = string.format( "%s %02d:", stamp, self.hour )
                    stamp = stamp .. " "
                else
                    stamp = ""
                end
                 stamp = string.format( "%s%02d:", stamp, self.hour )
                 if self.min then
                 if self.min then
                     stamp = string.format( "%s%02d", stamp, self.min )
                     stamp = string.format( "%s%02d", stamp, self.min )
Zeile 1.894: Zeile 1.736:
             if self.month then
             if self.month then
                 local bucket, m, suite, x
                 local bucket, m, suite, x
                 if show:find( "F", 1, true ) then
                 if show:find( "F" ) then
                     suite = "monthsLong"
                     suite = "monthsLong"
                 elseif show:find( "M", 1, true ) then
                 elseif show:find( "M" ) then
                     suite = "monthsAbbr"
                     suite = "monthsAbbr"
                 end
                 end
                 bucket = World[ suite ]
                 bucket = World[ suite ]
                 if bucket then
                 if bucket then
                     m = bucket[ opts.lang:lower() ]
                     m = bucket[ opts.lang ]
                     if slang then
                     if slang then
                         x = bucket[ slang:lower() ]
                         x = bucket[ slang ]
                     end
                     end
                     if m then
                     if m then
Zeile 1.983: Zeile 1.825:
     end
     end
     if r then
     if r then
         if r[ Meta.signature ] then
         raw = r[ Meta.signature ]
            raw = r[ Meta.signature ]
         rel = Private.future( shift )
         else
            raw = r
        end
        if type( shift ) == "table" then
            rel = shift
        else
            rel = Private.future( shift )
        end
     end
     end
     if raw and rel then
     if raw and rel then
Zeile 2.016: Zeile 1.850:
     -- Returns:
     -- Returns:
     --    string
     --    string
     local dels = { false, "", "-", "-", "", "", ":", ":", ".", "" }
     local dels = { false, "", "-", "-", "", ":", ":", ".", "", "" }
     local wids = { false, 4,  2,  2,  2,  2, 2,  2,  3,  3  }
     local wids = { false, 4,  2,  2,  2,  2,   2,  2,  3,  3  }
     local s    = ""
     local s    = ""
     local n, r, spec
     local n, r, spec
Zeile 2.028: Zeile 1.862:
                   end
                   end
               end -- f()
               end -- f()
     for i = 2, 5 do
     for i = 2, 4 do
         f( i )
         f( i )
     end -- for i
     end -- for i
     r = s
     r = s
     s = ""
     s = ""
     for i = 6, 10 do
     for i = 5, 10 do
         f( i )
         f( i )
     end -- for i
     end -- for i
Zeile 2.045: Zeile 1.879:
         end
         end
     end
     end
    r = r:gsub( "%.$", "" )
     return r
     return r
end -- Prototypes.tostring()
end -- Prototypes.tostring()
Zeile 2.115: Zeile 1.948:
     if not ask  or  ask == "" then
     if not ask  or  ask == "" then
         r1 = "c"
         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
     else
         local template = World.templates[ ask ]
         local template = World.templates[ ask ]
Zeile 2.143: Zeile 1.956:
             if tmp then
             if tmp then
                 template = tmp[ ask ]
                 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
         end
         end
Zeile 2.174: Zeile 1.977:
             end
             end
             if template.lift and
             if template.lift and
               ( assigned.dom or
               (assigned.dom or
                not ( assigned.month or assigned.year or assigned.bc )
                not (assigned.month or assigned.year or assigned.bc)
               ) then
               ) then
                 local stamp = false
                 local stamp = false
Zeile 2.198: Zeile 2.001:
                     end
                     end
                 end
                 end
                 if low or ask:find( "hh:mm:ss", 1, true ) then
                 if low or ask:find( "hh:mm:ss" ) then
                     if stamp then
                     if stamp then
                         r1 = string.format( "%s %s", r1, stamp )
                         r1 = string.format( "%s %s", r1, stamp )
Zeile 2.254: Zeile 2.057:
             if #s == 1 then
             if #s == 1 then
                 -- "YXWVUTSRQPONZABCDEFGHIKLM"
                 -- "YXWVUTSRQPONZABCDEFGHIKLM"
                 move = World.zones[ "!" ]:find( s, 1, true )
                 move = World.zones[ "!" ]:find( s )
                 if move then
                 if move then
                     move          = ( move - 13 ) * 100
                     move          = ( move - 13 ) * 100
Zeile 2.269: Zeile 2.072:
                   if tmp then
                   if tmp then
                       code = tmp[ s ]
                       code = tmp[ s ]
                  end
                  if not code  and
                      slang ~= "en"  and
                      World.zones.en then
                      code = World.zones.en[ s ]
                   end
                   end
                 end
                 end
Zeile 2.331: Zeile 2.129:


function p.test( args, alien )
function p.test( args, alien )
     local slang = args.lang or alien
     local slang = args.lang
     local obj  = Meta.fiat( args[ 1 ], false, args.shift )
     local obj  = Meta.fiat( args[ 1 ], false, args.shift )
     local r
     local r
Zeile 2.347: Zeile 2.145:
         r = ( args.noerror or "0" )
         r = ( args.noerror or "0" )
         if r == "0" then
         if r == "0" then
             r = fault( "Format invalid" )
             r = fault( "Format nicht erkannt" )
         else
         else
             r = ""
             r = ""
Zeile 2.363: Zeile 2.161:
         since = frame.args[ 1 ]
         since = frame.args[ 1 ]
     elseif s == "string" then
     elseif s == "string" then
        since = frame
    end
    if since then
         since = mw.text.trim( since )
         since = mw.text.trim( since )
         if since == "" then
         if since == "" then
Zeile 2.368: Zeile 2.169:
         end
         end
     end
     end
     return Prototypes.failsafe( false, since )  or  ""
     if since then
        if since > Meta.serial then
            r = ""
        else
            r = Meta.serial
        end
    else
        r = Meta.serial
    end
    return r
end -- p.failsafe
end -- p.failsafe


Bitte beachte, dass alle Beiträge im Regiowiki von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können. Reiche hier keine Texte ein, falls Du nicht willst, dass diese ohne Einschränkung geändert werden können.

Mit dem Speichern dieser Seite stimmst Du den Nutzungsbedingungen zu und versicherst, dass Du den Beitrag selbst verfasst hast bzw. dass er keine fremden Rechte verletzt, und willigst ein, ihn unter der Creative Commons Attribution/Share-Alike Lizenz 3.0 zu veröffentlichen. Übertrage ohne Genehmigung keine urheberrechtlich geschützten Inhalte!

Du stimmst einer Autorennennung mindestens durch URL oder Verweis auf den Artikel zu. Wenn Du nicht möchtest, dass Dein Text weiterbearbeitet und weiterverbreitet wird bzw. den Nutzungsbedingungen nicht zustimmst, dann speichere ihn nicht.

Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)

[] [[]] | {{}} {{{}}} “” ‘’ «» ‹› „“ ‚‘ · × ° § ~~~~ <s></s> <small></small> <sup></sup> <sub></sub> <tt></tt> <code></code> <pre></pre> &nbsp; [[Kategorie:]] [[Datei:]] [[Media:]] {{DEFAULTSORT:}} {{NAMESPACE}} {{PAGENAME}} #REDIRECT[[]] <gallery></gallery> <!-- --> <nowiki></nowiki> <code><nowiki></nowiki></code> <includeonly></includeonly> <noinclude></noinclude> <onlyinclude></onlyinclude> <translate></translate> <tvar|></> <languages/>

Folgende Vorlagen werden auf dieser Seite verwendet: