Modul:Kalender: Unterschied zwischen den Versionen
Aus FürthWiki
(+ DateLastDayCompleter()) |
(fix local p = {}) |
||
| Zeile 1: | Zeile 1: | ||
p = {} | local p = {} | ||
p.month_names = { "Januar", "Februar", "März", "April", "Mai", "Juni", | p.month_names = { "Januar", "Februar", "März", "April", "Mai", "Juni", | ||
Aktuelle Version vom 14. Januar 2026, 07:25 Uhr
Dieses Modul enthält Kalender/Datums-bezogene Funktionen.
istJahrestag()
Überprüft den Namen des beinhaltenden Artikels auf:
- mit 1 oder 2 Ziffern beginnt (
%d%d?) - gefolgt ist von einem Punkt (
%.) - optionalem Leerzeichen (
%s*), - und einem Monatsnamen (
%a+= Buchstaben).
Wenn das zutreffend ist, wird das erste Argument zurückgegeben. Wenn nicht, wird das zweite Argument zurückgegeben. Sind keine Argumente gegeben, wird true oder "" zurückgegeben.
istJahreszahl()
Überprüft den Namen des beinhaltenden Artikels auf:
- Ist der Artikelname eine Ganzzahl, positiv oder negativ? (
^%-?%d+$) - Oder ist der Artikelname eine positive Ganzzahl, gefolgt von "v. Chr." oder "n. Chr." (
^%d+%s+[vn]%.%s+Chr%.$)
Wenn das zutreffend ist, wird das erste Argument zurückgegeben. Wenn nicht, wird das zweite Argument zurückgegeben. Sind keine Argumente gegeben, wird "" oder true zurückgegeben.
dateLastDayCompleter() / DateLastDayCompleter()
Ergänzt ein Formular-Datum um letzten Tag für eine SMW-Query, insbesondere Abfragen.
Unterseiten
local 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(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
return p