26.714
Bearbeitungen
(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( | 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 | ||