Modul:Vorlage:FormatDate: Unterschied zwischen den Versionen
te>Antonsusi K |
te>Antonsusi K |
||
Zeile 38: | Zeile 38: | ||
-- | -- | ||
− | local function CheckDate( | + | local function CheckDate(Tfl) |
− | if ( | + | if ( Tfl.m == 1 or Tfl.m == 3 or Tfl.m == 5 or Tfl.m == 7 or Tfl.m == 8 or Tfl.m == 10 or Tfl.m == 12 ) and Tfl.d > 31 then |
return false; | return false; | ||
end | end | ||
− | if | + | if Tfl.m == 2 then -- Die greg. Sonderregeln werden ignoriert. |
− | if | + | if Tfl.y % 4 ~= 0 and Tfl.d > 28 then return false; end |
− | if | + | if Tfl.y % 4 == 0 and Tfl.d > 29 then return false; end |
end | end | ||
-- Hier nur noch 30-Tage-Monate übrig. | -- Hier nur noch 30-Tage-Monate übrig. | ||
− | if | + | if Tfl.d > 30 then return false; end |
return true; | return true; | ||
end | end | ||
-- | -- | ||
− | function Run(frame) | + | function p.Run(frame) |
local T_F = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"} | local T_F = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"} | ||
local T_M = {"Jan.","Feb.", "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."} | local T_M = {"Jan.","Feb.", "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."} | ||
Zeile 133: | Zeile 133: | ||
-- | -- | ||
function p.Execute(frame) | function p.Execute(frame) | ||
− | return Run(frame:getParent()) | + | return p.Run(frame:getParent()) |
end | end | ||
return p | return p |
Version vom 2. Juni 2013, 01:19 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Vorlage:FormatDate/Doku erstellt werden
local p = {}
-- Trennen der Parameter
local function Split(str)
local Tbl = {}
local Teil=""
local pos = 0
Tbl.y = 0
Tbl.m = 0
Tbl.d = 0
-- str = mw.ustring.gsub(str,'/','-'); -- Evtl. Erweiterung auf Slashstring.
pos = mw.ustring.find(str,'-',1,true);
if pos == 1 then -- Minuszeichen am Anfang - nochmal suchen
pos = mw.ustring.find(str,'-',2,true);
end
if not pos then
return Tbl
end
Teil = mw.ustring.sub(str,1,pos-1)
Tbl.y = tonumber(Teil) or 'x'
str = mw.ustring.sub(str,pos+1, -1)
pos = mw.ustring.find(str,'-',1,true);
if not pos or pos == 0 then
return Tbl
end
Teil = mw.ustring.sub(str,1,pos-1)
Tbl.m = tonumber(Teil) or 0
Teil = mw.ustring.sub(str,pos+1, -1)
if #Teil == 0 then
return Tbl
end
if Tbl.m == 0 then
Tbl.d = 0
else
Tbl.d = tonumber(Teil) or 0
end
return Tbl
end
--
local function CheckDate(Tfl)
if ( Tfl.m == 1 or Tfl.m == 3 or Tfl.m == 5 or Tfl.m == 7 or Tfl.m == 8 or Tfl.m == 10 or Tfl.m == 12 ) and Tfl.d > 31 then
return false;
end
if Tfl.m == 2 then -- Die greg. Sonderregeln werden ignoriert.
if Tfl.y % 4 ~= 0 and Tfl.d > 28 then return false; end
if Tfl.y % 4 == 0 and Tfl.d > 29 then return false; end
end
-- Hier nur noch 30-Tage-Monate übrig.
if Tfl.d > 30 then return false; end
return true;
end
--
function p.Run(frame)
local T_F = {"Januar","Februar", "März", "April", "Mai","Juni", "Juli", "August","September","Oktober","November","Dezember","Jänner"}
local T_M = {"Jan.","Feb.", "Mrz", "Apr.", "Mai","Jun.", "Jul.", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
local T_S = {"Jan.","Feb.", "März", "Apr.", "Mai","Juni", "Juli", "Aug.","Sep.","Okt.","Nov.","Dez.","Jän."}
local Text = "";
local AT = false;
local NBSP = false;
local LINK = false;
local VCHR = "";
local STIL = 'F';
local Tbl = {}
if mw.ustring.lower(frame.args[2] or "") == "nbsp" or mw.ustring.lower(frame.args[3] or "") == "nbsp" or mw.ustring.lower(frame.args[4] or "") == "nbsp" then NBSP = true; end
if mw.ustring.lower(frame.args[2] or "") == "link" or mw.ustring.lower(frame.args[3] or "") == "link" or mw.ustring.lower(frame.args[4] or "") == "link" then LINK = true; end
if mw.ustring.upper(frame.args[2] or "") == "M" or mw.ustring.upper(frame.args[3] or "") == "M" or mw.ustring.upper(frame.args[4] or "") == "M" then STIL = 'M'; end
if mw.ustring.upper(frame.args[2] or "") == "S" or mw.ustring.upper(frame.args[3] or "") == "S" or mw.ustring.upper(frame.args[4] or "") == "S" then STIL = 'S'; end
if mw.ustring.lower(frame.args['AT'] or "") == "ja" then AT = true; end
Tbl = Split(frame.args[1])
if Tbl.y == 'x' then
Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Jahr!</span>'
return Text
end
if Tbl.m > 12 or Tbl.m < 0 then
Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiger Wert für Monat!</span>'
return Text
end
if Tbl.y <= 0 then
Tbl.y = 1 - Tbl.y
VCHR = " v. Chr.";
end
if Tbl.d > 0 then
if CheckDate(Tbl) then
Text = tostring(Tbl.d) .. '. '
else
Text = '<span class="error">[[Vorlage:FormatDate]]: Ungültiges Datum!</span>'
return Text
end
end
if Tbl.m > 0 then
if LINK then
if Tbl.d == 0 then
Linkziel =T_F[Tbl.m]
else
Linkziel = tostring(Tbl.d) .. ". " .. T_F[Tbl.m]
end
end
if AT and Tbl.m == 1 then
Tbl.m = 13
end
if STIL == 'M' then
Text = Text .. T_M[Tbl.m]
elseif STIL == 'S' then
Text = Text .. T_S[Tbl.m]
else
Text = Text .. T_F[Tbl.m]
end
if LINK then
Text = "[[" .. Linkziel .. "|" .. Text .. "]]"
end
if NBSP then
Text = Text .. " "
else
Text = Text .. " "
end
end
if LINK then
Text = Text .. "[[" .. tostring(Tbl.y) .. VCHR .. "]]"
else
Text = Text .. tostring(Tbl.y) .. VCHR
end
return Text
end
--
function p.Execute(frame)
return p.Run(frame:getParent())
end
return p