--[[
Modul für Hilfsfunktionen für Vorlage:FormatDateSimple
]]
local p = { }
function p.format(frame)
--[[
Formatierung eines Datums. Wenn dieses im ISO-Format (YYYY-MM-DD) vorliegt, wird es im deutschen Langformat (z.B. "6. Dezember 2018") formatiert.
Sonst wird der übergebene Wert unverändert zurückgegeben.
Parameter:
* Datum
]]
local sDateRaw = frame.args[1]
local tabMonate = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}
local sDateFormatted = sDateRaw -- Fallback
local sYear, sMonth, sDay = mw.ustring.match(sDateRaw, "(%d%d%d%d)-(%d%d)-(%d%d)")
if sYear ~= nil then
-- Die folgende Prüfung ist etwas trickreich:
-- Die Funktion os.time toleriert zwar zu große Angeben für month und day,
-- diese überzähligen Einheiten werden aber aufaddiert, was dazu führt,
-- dass das mittels os.date wieder ins ISO-Format rückkonvertierte Datum
-- nicht gleich dem ursprünglichen Datum (Eingangsparameter) sein kann.
local dtTest = os.time{year=sYear, month=sMonth, day=sDay}
if os.date("%Y-%m-%d", dtTest) == sDateRaw then -- valid?
sDateFormatted = tonumber(sDay) .. ". " .. tabMonate[tonumber(sMonth)] .. " " .. tonumber(sYear)
end
end
return sDateFormatted
end
return p