Modul:Kalender/Work
Aus FürthWiki
Die Dokumentation für dieses Modul kann unter Modul:Kalender/Work/Doku erstellt werden
p = {}
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(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-01-01
-- Februar 2000 => 2000-02-01
-- 2020/04/02 => 2020-04-02
local date_iso = ""
date = p.dateFirstDayCompleter(date)
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
return date_iso
end
return p