Modul:Kalender: Unterschied zwischen den Versionen

fix local p = {}
(Die Seite wurde neu angelegt: „p = {} function p.date2ISO(d) end return p“)
 
(fix local p = {})
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
p = {}
local p = {}


function p.date2ISO(d)
p.month_names = { "Januar", "Februar", "März", "April", "Mai",  "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember"}
 
p.month_numbers = {
["Januar"] = 1, ["Februar"] = 2, ["März"] = 3,
["April"] = 4, ["Mai"] = 5, ["Juni"] = 6,
["Juli"] = 7, ["August"] = 8, ["September"] = 9,
["Oktober"] = 10, ["November"] = 11, ["Dezember"] = 12}
 
function p.IstJahrestag(frame)
-- #invoke wrapper
local args = frame.args
    local title = mw.title.getCurrentTitle().text
    local tag, monat = p.istJahrestag(title)
   
    if tag and monat then
        return frame.args[1] or "true"
    else
        return frame.args[2] or ""
    end
end
 
function p.istJahrestag(s)
s = s or ""
-- Prüfe auf ein-/zweistellige Zahl durch Punkt gefolgt, opt. Leerzeichen
return s:match("^(%d%d?)%.%s*(%a+)$")
end
 
function p.IstJahreszahl(frame)
-- #invoke wrapper
    local args = frame.args
    local title = mw.title.getCurrentTitle().text
 
    if p.istJahreszahl(title) then
        return args[1] or "true"
    else
        return args[2] or ""
    end
end
 
function p.istJahreszahl(s)
s = s or ""
-- Prüfe auf Formate wie: 2024, -44, 44 v. Chr., 800 n. Chr.
return s:match("^%-?%d+$") or s:match("^%d+%s+[vn]%.%s+Chr%.$")
end
 
function p.DateLastDayCompleter(frame)
-- mw.log("DateLastDayCompleter(frame)")
-- mw.logObject(frame, "frame")
local date = frame.args[1] or ""
local last_date = p.dateLastDayCompleter(date)
-- mw.logObject(last_date, "last_date")
return last_date
end
 
function p.dateLastDayCompleter(date)
-- ergänzt letzten Tag für SMW-Query
-- 2000 => 2000/12/31
-- Februar 2000 => 2000/2/29
-- Februar 2001 => 2001/2/28
-- 2020/04/02 => 2020/04/02
local last_date
if #date == 4 then -- nur "Jahr" vorhanden
last_date = date .. "/12/31"
elseif string.find(date, " ") ~= nil then -- "Monat Jahr" vorhanden (hat Leerzeichen)
local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
local month = string.sub(date, 1, string.find(date, " ") - 1)
month = p.month_numbers[month]
local year = string.sub(date, string.find(date, " ") + 1)
last_date = year .. "/" .. string.format("%02d", month) .. "/"
if month == 2 and year % 4 == 0 then -- Sonderfall Feb. Schaltjahr
last_date = last_date .. "29"
else
last_date = last_date .. days[month]
end
else
last_date = date
end
return last_date
end
 
function p.dateFirstDayCompleter(date)
-- ergänzt ersten Tag
-- 2000 => 2000/01/01
-- Februar 2000 => 2000/2/01
-- 2020/04/02 => 2020/04/02
local first_date
if #date == 4 then -- nur "Jahr" vorhanden
first_date = date .. "/01/01"
elseif string.find(date, " ") ~= nil then -- "Monat Jahr" vorhanden (hat Leerzeichen)
local month = string.sub(date, 1, string.find(date, " ") - 1)
month = p.month_numbers[month]
local year = string.sub(date, string.find(date, " ") + 1)
first_date = year .. "/" .. string.format("%02d", month) .. "/01"
else
first_date = date
end
return first_date
end
 
function p.date2ISO(date)
-- 2000 => 2000
-- Februar 2000 => 2000-02
-- 2020/04/02 => 2020-04-02
local date_iso = ""
if #date == 4 then -- nur "Jahr" vorhanden
date_iso = date
elseif string.find(date, " ") ~= nil then -- "Monat Jahr" vorhanden (hat Leerzeichen)
local month = string.sub(date, 1, string.find(date, " ") - 1)
month = p.month_numbers[month]
date_iso = string.sub(date, string.find(date, " ") + 1)
if month ~= nil then
date_iso = date_iso .. "-" .. string.format("%02d", month)
end
else
for i = 1, #date do
local char = string.sub(date, i, i)
if char == "/" then
date_iso = date_iso .. "-"
else
date_iso = date_iso .. char
end
end
end
return date_iso
end
end


return p
return p