Modul:Datum: Unterschied zwischen den Versionen

Aus KoschWiki
Zur Navigation springen Zur Suche springen
SyncBot (D | B)
K (Automatisch synchronisiert.)
SyncBot (D | B)
K (Automatisch synchronisiert.)
Zeile 379: Zeile 379:
 
  if (at<0) then return '' end
 
  if (at<0) then return '' end
 
  j=math.floor(at/365)
 
  j=math.floor(at/365)
 +
if num then return j end
 
  if(g<=4) then
 
  if(g<=4) then
if (num) then return j end
 
 
  if (j==1) then return "1 Jahr" end
 
  if (j==1) then return "1 Jahr" end
 
  return j.." Jahre"
 
  return j.." Jahre"
 
  end
 
  end
if num then return '' end
 
 
  if(g<=6) then
 
  if(g<=6) then
 
  jr=10*math.floor(j/10)
 
  jr=10*math.floor(j/10)
Zeile 404: Zeile 403:
 
   datg=mw.text.split(s,'/',true)
 
   datg=mw.text.split(s,'/',true)
 
   if(#datg<2) then  
 
   if(#datg<2) then  
   table.insert(datg,2,0)
+
   table.insert(datg,0)
 
   end
 
   end
 
   dat=mw.text.split(datg[1],'.',true)
 
   dat=mw.text.split(datg[1],'.',true)
Zeile 427: Zeile 426:
 
   datg=mw.text.split(s,'/',true)
 
   datg=mw.text.split(s,'/',true)
 
   if(#datg<2) then  
 
   if(#datg<2) then  
   table.insert(datg,2,0)
+
   table.insert(datg,0)
 
   end
 
   end
 +
  olddate=false
 
   dat=mw.text.split(datg[1],':',true)
 
   dat=mw.text.split(datg[1],':',true)
   while(#dat<3) do
+
   if(mw.ustring.len(dat[1])<=2) then
  table.insert(dat,0,0)
+
  while(#dat<3) do
 +
  table.insert(dat,0)
 +
  end
 +
  else
 +
    dat[1]=mw.ustring.sub(datg[1],1,2)
 +
    dat[2]=mw.ustring.sub(datg[1],-2)
 +
    dat[3]='00'
 +
    olddate=true
 
   end
 
   end
 
   result={}
 
   result={}
Zeile 443: Zeile 450:
 
   if(result['minute']==nil) then result['error']="Minute muss eine Zahl sein." end
 
   if(result['minute']==nil) then result['error']="Minute muss eine Zahl sein." end
 
   if(result['sekunde']==nil) then result['error']="Sekunde muss eine Zahl sein." end
 
   if(result['sekunde']==nil) then result['error']="Sekunde muss eine Zahl sein." end
   if(result['sekunde']>=60) then
+
   if(olddate) then
  local x=result['sekunde']
 
  result['stunde']=math.floor(x/100)
 
  result['minute']=x%100
 
  result['sekunde']=0
 
 
   result['genauigkeit']=2
 
   result['genauigkeit']=2
 
   end
 
   end

Version vom 10. April 2018, 17:28 Uhr

Dokumentation und Testfälle unter Modul:Datum/Doku.
 local p = {}
 
 --Erwartet einen Zahlenwert und gibt den Wochentag zurück
 -- Wochentag w=1 bis 7
 --Rückgabe
 -- Wochentag
 -- Leerstring bei illegalen Werten
 local getWochentagLang=function(w)
  if (w== 1) then return "Rohalstag" end
  if (w== 2) then return "Feuertag" end
  if (w== 3) then return "Wassertag" end
  if (w== 4) then return "Windstag" end
  if (w== 5) then return "Erdtag" end
  if (w== 6) then return "Markttag" end
  if (w== 7) then return "Praiostag" end
  return ""
 end

 --Erwartet einen Zahlenwert und gibt den Planet des Wochentages zurück
 -- Wochentag w=1 bis 7
 --Rückgabe
 -- Planet des Wochentages
 -- Leerstring bei illegalen Werten
 local getWochentagPlanet=function(w)
  if (w== 1) then return "Nandus" end
  if (w== 2) then return "Kor" end
  if (w== 3) then return "Marbo" end
  if (w== 4) then return "Aves" end
  if (w== 5) then return "Simia" end
  if (w== 6) then return "Horas" end
  if (w== 7) then return "Ucuri" end
  return ""
 end

 --Erwartet einen Zahlenwert und gibt den Planet des Monatsfünftels zurück
 -- Tag t=1 bis 30
 --Rückgabe
 -- Planet des Monatsfünftels
 -- Leerstring bei illegalen Werten
 local getMonatsfuenftelPlanet=function(t)
  if (t<1) or (t>30) then return "" end
  f=1+math.floor((t-1)/6)
  if (f== 1) then return "Simia" end
  if (f== 2) then return "Aves" end
  if (f== 3) then return "Kor" end
  if (f== 4) then return "Ucuri" end
  if (f== 5) then return "Marbo" end
  return ""
 end

 --Erwartet einen Zahlenwert und gibt den Planet des Tages im Monatsfünftel zurück
 -- Tag t=1 bis 30
 --Rückgabe
 -- Planet des Tags im Monatsfünftels
 -- Leerstring bei illegalen Werten
 local getMonatstagPlanet=function(t)
  if (t<1) or (t>30) then return "" end
  f=1+(t-1)%6
  if (f== 1) then return "Horas" end
  if (f== 2) then return "Simia" end
  if (f== 3) then return "Levthan" end
  if (f== 4) then return "Kor" end
  if (f== 5) then return "Ucuri" end
  if (f== 6) then return "Marbo" end
  return ""
 end

--Erwartet einen Zahlenwert und gibt das Sternbild des Monats zurück
 -- Monat m=1 bis 13
 --Rückgabe
 -- Sternbild des Monats
 -- Leerstring bei illegalen Werten
 local getMonatsSternbild=function(m)
  if (m== 1) then return "Greif" end
  if (m== 2) then return "Schwert" end
  if (m== 3) then return "Delfin" end
  if (m== 4) then return "Gans" end
  if (m== 5) then return "Rabe" end
  if (m== 6) then return "Schlange" end
  if (m== 7) then return "Eisbär" end
  if (m== 8) then return "Eidechse" end
  if (m== 9) then return "Fuchs" end
  if (m==10) then return "Storch" end
  if (m==11) then return "Hammer und Amboss" end
  if (m==12) then return "Stute" end
  if (m==13) then return "Sternenleere" end
  return ""
 end

 --Erwartet einen Zahlenwert und gibt den vollständigen Monat zurück
 -- Monat m=1 bis 13
 --Rückgabe
 -- Monat
 -- Leerstring bei illegalen Werten
 local getMonatLang=function(m)
  if (m== 1) then return "Praios" end
  if (m== 2) then return "Rondra" end
  if (m== 3) then return "Efferd" end
  if (m== 4) then return "Travia" end
  if (m== 5) then return "Boron" end
  if (m== 6) then return "Hesinde" end
  if (m== 7) then return "Firun" end
  if (m== 8) then return "Tsa" end
  if (m== 9) then return "Phex" end
  if (m==10) then return "Peraine" end
  if (m==11) then return "Ingerimm" end
  if (m==12) then return "Rahja" end
  if (m==13) then return "Namenloser" end
  return ""
 end

--Erwartet einen Zahlenwert und gibt den dreibuchstabigen Monat zurück
 -- Monat m=1 bis 13
 --Rückgabe
 -- dreibuchstabiger Monat
 -- Leerstring bei illegalen Werten
 local getMonatKurz=function(m)
  if (m== 1) then return "Pra" end
  if (m== 2) then return "Ron" end
  if (m== 3) then return "Eff" end
  if (m== 4) then return "Tra" end
  if (m== 5) then return "Bor" end
  if (m== 6) then return "Hes" end
  if (m== 7) then return "Fir" end
  if (m== 8) then return "Tsa" end
  if (m== 9) then return "Phe" end
  if (m==10) then return "Per" end
  if (m==11) then return "Ing" end
  if (m==12) then return "Rah" end
  if (m==13) then return "Nam" end
  return ""
 end

 --Erwartet einen Zahlenwert und gibt den Stundennamen
 -- Stunde h=0 bis 23
 -- Genauigkeit g
 --Rückgabe
 -- Stundenname
 -- Leerstring bei illegalen Werten
 local getStundeBeschreibung=function(h,g)
  if(g<=2) then
   if (h== 0) then return "zur nächtlichen Praiosstunde" end
   if (h== 1) then return "zur nächtlichen Rondrastunde" end
   if (h== 2) then return "zur nächtlichen Efferdstunde" end
   if (h== 3) then return "zur nächtlichen Traviastunde" end
   if (h== 4) then return "zur morgendlichen Boronstunde" end
   if (h== 5) then return "zur morgendlichen Hesindestunde" end
   if (h== 6) then return "zur morgendlichen Firunstunde" end
   if (h== 7) then return "zur morgendlichen Tsastunde" end
   if (h== 8) then return "zur morgendlichen Phexstunde" end
   if (h== 9) then return "zur morgendlichen Perainestunde" end
   if (h==10) then return "zur mittäglichen Ingerimmstunde" end
   if (h==11) then return "zur mittäglichen Rahjastunde" end
   if (h==12) then return "zur mittäglichen Praiosstunde" end
   if (h==13) then return "zur mittäglichen Rondrastunde" end
   if (h==14) then return "zur mittäglichen Efferdstunde" end
   if (h==15) then return "zur mittäglichen Traviastunde" end
   if (h==16) then return "zur abendlichen Boronstunde" end
   if (h==17) then return "zur abendlichen Hesindestunde" end
   if (h==18) then return "zur abendlichen Firunstunde" end
   if (h==19) then return "zur abendlichen Tsastunde" end
   if (h==20) then return "zur abendlichen Phexstunde" end
   if (h==21) then return "zur abendlichen Perainestunde" end
   if (h==22) then return "zur nächtlichen Ingerimmstunde" end
   if (h==23) then return "zur nächtlichen Rahjastunde" end
  end
  if (g==3) then
  	if (h>= 0) and (h<= 1) then return "mitten in der Nacht" end
  	if (h>= 2) and (h<= 3) then return "spät in der Nacht" end
  	if (h>= 4) and (h<= 5) then return "früh am Morgen" end
  	if (h>= 6) and (h<= 7) then return "mitten am Morgen" end
  	if (h>= 8) and (h<= 9) then return "spät am Morgen" end
  	if (h>=10) and (h<=11) then return "früh am Mittag" end
  	if (h>=12) and (h<=13) then return "mitten am Mittag" end
  	if (h>=14) and (h<=15) then return "spät am Mittag" end
  	if (h>=16) and (h<=17) then return "früh am Abend" end
  	if (h>=18) and (h<=19) then return "mitten am Abend" end
  	if (h>=20) and (h<=21) then return "spät am Abend" end
  	if (h>=22) and (h<=23) then return "früh in der Nacht" end
  end
  if (g==4) then
  	if (h>=22) or  (h<= 3) then return "in der Nacht" end
  	if (h>= 4) and (h<= 9) then return "am Morgen" end
  	if (h>=10) and (h<=15) then return "am Mittag" end
  	if (h>=16) and (h<=21) then return "am Abend" end
  end
  return ""
 end

  
 --Erwartet vier Zahlenwerte und gibt den Wochentag je nach Genauigkeit als String zurück
 -- Tag         t=1 bis 30 (bzw. 5 bei m=13)
 -- Monat       m=1 bis 13
 -- Jahr        j=minInt bis maxInt
 -- Genauigkeit g=-2 bis -1
 --Rückgabe
 -- Wochentag plus ", "
 -- Leerstring bei illegalen Werten
 local getWochentag=function(t,m,j,g)
  if (m<1) or (m>13) or
     (t<1) or (t>30) or
     (g>=0) then return 0 end
     --Tag des Jahres
     d=(m-1)*30+t
     w=(d+j+5)%7
  return (w+1)
 end

--Erwartet drei Zahlenwerte und gibt den Tag je nach Genauigkeit als String zurück
 -- Tag         t=1 bis 30 (bzw. 5 bei m=13)
 -- Monat       m=1 bis 13
 -- Genauigkeit g=0 bis  1
 --Rückgabe
 -- entweder Zahl plus ". " bei g==0
 -- oder Anfang/Mitte/Ende (bzw. leer bei m=13) bei g==1
 -- Leerstring bei illegalen Werten
 local getTagBeschreibung=function(t,m,g)
  if (m<1) or (m>13) or
     (t<1) or (t>30) or
     (g>1) then return "" end
  if (g<=0) then return t..". " end
  if (m==13) then return "" end
  if (t<=10) then return "Anfang " end
  if (t>=21) then return "Ende " end
  return "Mitte "
 end
 
 --Erwartet zwei Zahlenwerte und gibt den Monat je nach Genauigkeit als String zurück
 -- Monat       m=1 bis 13
 -- Genauigkeit g=0 bis  3
 --Rückgabe
 -- entweder Monatskürzel bei g==0 bis g==2
 -- oder Frühling/Sommer/Herbst/Winter bei g==3
 -- Leerstring bei illegalen Werten
 local getMonatBeschreibung=function(m,g)
  if (m<1) or (m>13) or
     (g>3) then return "" end
  if (g<0) then return getMonatLang(m).." " end
  if (g<3) then return getMonatKurz(m).." " end
  if (m<3) then return "Sommer am Anfang " end
  if((m>=3)and(m<=5)) then return "Herbst " end
  if((m>=6)and(m<=8)) then return "Winter " end
  if((m>=9)and(m<=11)) then return "Frühling " end
  return "Sommer am Ende "
 end
 
 --Erwartet zwei Zahlenwerte und gibt das Jahr je nach Genauigkeit als String zurück
 -- Jahr        j=minInt bis maxInt
 -- Genauigkeit g=0 bis 9
 --Rückgabe
 -- entweder Jahr plus " BF" bzw. " vBF" bei g==0 bis g==4
 -- oder "er Jahre (v)BF" bei g==5
 -- oder "Anfang/Mitte/Ende x. Jhd. (v)BF" bei g==6
 -- oder "x. Jhd. (v)BF" bei g==7
 -- oder "Anfang/Mitte/Ende x. Jtd. (v)BF" bei g==8
 -- oder "x. Jtd. (v)BF" bei g==9
 -- Leerstring bei illegalen Werten
 local getJahrBeschreibung=function(j,g)
  if (g>9) then return "" end
  v=false;
  k=" BF"
  if (j<0) then
   k=" vBF"
   j=-j
   v=true
  end
  js=j
  if(g==5) then
   jr=10*math.floor(j/10)
   js=jr.."er Jahre"
  end
  if((g==6)or(g==7)) then
   jr=math.floor(j/100)+1
   jd=j-((jr-1)*100)
   jds="Mitte "
   if((v==false) and (jd<=33)) then jds="Anfang " end
   if((v==true) and (jd<=33)) then jds="Ende " end
   if((v==false) and (jd>=67)) then jds="Ende " end
   if((v==true) and (jd>=67)) then jds="Anfang " end
   if(g==7) then jds="" end
   js=jds..jr..". Jhd."
  end
  if((g==8)or(g==9)) then
   jr=math.floor(j/1000)+1
   jd=j-((jr-1)*1000)
   jds="Mitte "
   if((v==false) and (jd<=333)) then jds="Anfang " end
   if((v==true) and (jd<=333)) then jds="Ende " end
   if((v==false) and (jd>=667)) then jds="Ende " end
   if((v==true) and (jd>=667)) then jds="Anfang " end
   if(g==9) then jds="" end
   js=jds..jr..". Jts."
  end
  return js..k
 end
 
 --Erwartet t,m,j des aventurischen Datums plus Genauigkeit g von 0 bis 11 und gibt ein formatiertes Ergebnis zurück
 local formatdatum=function(t,m,j,g)
  w=getWochentag(t,m,j,g)
  as=""
  ws=""
  as=getWochentagPlanet(w)..", "..getMonatstagPlanet(t)..", "..getMonatsfuenftelPlanet(t)..", "..getMonatsSternbild(m)
  if (as==", , , ") then as="" end;
  if (g==-3) then
  	return as
  end
  if (g==-2) and (as~="") then
  	as=" ("..as..")"
  else
  	as=""
  end
  if (w>=1) and (w<=7) then
  	ws=getWochentagLang(w)..", ";
  end
  ts=getTagBeschreibung(t,m,g)
  ms=getMonatBeschreibung(m,g)
  js=getJahrBeschreibung(j,g)
  res=ws..ts..ms..js..as
  if (res=="")and(g==10) then res="unbekannt" end
  return res  
 end
 
  --Erwartet h,m,s der aventurischen Zeit plus Genauigkeit g und gibt ein formatiertes Ergebnis zurück
 local formatzeit=function(h,m,s,g)
  hs=getStundeBeschreibung(h,g)
  --0: Format "17:43:25 Uhr"
  if g==0 then
   return string.format("%02d:%02d:%02d",h,m,s)..' Uhr'
  end
  --1: Format "17:43 Uhr"
  if g==1 then
   return string.format("%02d:%02d",h,m)..' Uhr'
  end
  --2: Format "zur abendlichen Hesindestunde"
  --3: Format "früh am Abend"
  --4: Format "am abend"
  if (g>=2)and(g<=4) then
   return hs
  end
  if (g==5) then
   return "unbekannte Zeit"
  end
   return ""
 end


 --Erwartet t,m,j des aventurischen Datums plus Genauigkeit g von 0 bis 9 und gibt ein formatiertes Ergebnis zurück
 local indextag=function(t,m,j,g)
        r=m*100+t
        s=tostring(r)
        if (m<10) then s='0'..s end
  	return s
 end

 --Erwartet t,m,j des aventurischen Datums plus Genauigkeit g von 0 bis 9 und gibt ein formatiertes Ergebnis zurück
 local indexdatum=function(t,m,j,g)
  	return j*10000+m*100+t
 end
 
 --Gibt das aktuelle Datum als array['tag','monat','jahr','genauigkeit'=0] zurück
 local aktuellesdatum=function()
   actdate=os.date('*t')
   datum={}
   datum['error']=nil
   year=tonumber(actdate.year)
   datum['jahr']=year-977;
   yday=tonumber(actdate.yday)
   datum['monat']=math.floor((yday-1)/30)+1
   datum['tag']=(yday-1)%30+1
   datum['genauigkeit']=0
   return datum
 end

 --Alter
 local alter=function(t1,m1,j1,t2,m2,j2,g,num)
 	i1=j1*365+(m1-1)*30+t1
 	i2=j2*365+(m2-1)*30+t2
 	at=i2-i1
 	if (at<0) then return '' end
 	j=math.floor(at/365)
 	if num then return j end
 	if(g<=4) then
 		if (j==1) then return "1 Jahr" end
 		return j.." Jahre"
 	end
 	if(g<=6) then
 		jr=10*math.floor(j/10)
   		return "über "..jr.." Jahre"
   	end
 	if(g<=8) then
 		jr=100*math.floor(j/100)
   		return "über "..jr.." Jahre"
   	end
 	if(g<=9) then
 		jr=1000*math.floor(j/1000)
   		return "über "..jr.." Jahre"
   	end
   	return "unbekannt"
 end

 --Dekodiert ein Datum im Format [[T.]M.]J[/G]
 local decodedatum=function(s)
  datg=mw.text.split(s,'/',true)
  if(#datg<2) then 
  	table.insert(datg,0)
  end
  dat=mw.text.split(datg[1],'.',true)
  while(#dat<3) do
  	table.insert(dat,0,0)
  end
  result={}
  result['genauigkeit']=tonumber(datg[2])
  result['error']=nil
  result['jahr']=tonumber(dat[3])
  result['monat']=tonumber(dat[2])
  result['tag']=tonumber(dat[1])
  if(result['genauigkeit']==nil) then result['error']="Genauigkeit muss eine Zahl sein." end
  if(result['jahr']==nil) then result['error']="Jahr muss eine Zahl sein." end
  if(result['monat']==nil) then result['error']="Monat muss eine Zahl sein." end
  if(result['tag']==nil) then result['error']="Tag muss eine Zahl sein." end
  return result
 end

 --Dekodiert eine Zeit im Format HH:[MM[:SS]][/G], Heuristik für das alte Nummernformat HHMM
 local decodezeit=function(s)
  datg=mw.text.split(s,'/',true)
  if(#datg<2) then 
  	table.insert(datg,0)
  end
  olddate=false
  dat=mw.text.split(datg[1],':',true)
  if(mw.ustring.len(dat[1])<=2) then
  	while(#dat<3) do
  		table.insert(dat,0)
  	end
  else
    dat[1]=mw.ustring.sub(datg[1],1,2)
    dat[2]=mw.ustring.sub(datg[1],-2)
    dat[3]='00'
    olddate=true
  end
  result={}
  result['genauigkeit']=tonumber(datg[2])
  result['error']=nil
  result['stunde']=tonumber(dat[1])
  result['minute']=tonumber(dat[2])
  result['sekunde']=tonumber(dat[3])
  if(result['genauigkeit']==nil) then result['error']="Genauigkeit muss eine Zahl sein." end
  if(result['stunde']==nil) then result['error']="Stunde muss eine Zahl sein." end
  if(result['minute']==nil) then result['error']="Minute muss eine Zahl sein." end
  if(result['sekunde']==nil) then result['error']="Sekunde muss eine Zahl sein." end
  if(olddate) then
  	result['genauigkeit']=2
  end
  return result
 end

 --Gibt die Periode nach dem Jahr, Monat, Tag zurück
 local periode=function(t,m,j,g)
  if (g>=8) then  return "Unbekannt" end
  index=t+m*100+j*10000
  if (index> 10280915) then return "Rohajas Regierungszeit" end
  if (index> 10100909) then return "Regentschaftsjahre" end
  if (index>  9920315) then return "Hals Regierungszeit" end
  if (index>  9749999) then return "Retos Regierungszeit" end
  if (index>  9489999) then return "Bardos und Cellas Regierungszeit" end
  if (index>  9329999) then return "Pervals Regierungszeit" end
  if (index>  9029999) then return "Kaiserlose Zeiten" end
  if (index>  7729999) then return "Späte Almadaner Dynastie" end
  if (index>  5959999) then return "Frühe Almadaner Dynastie" end
  if (index>  4659999) then return "Rohalszeit und Magierkriege" end
  if (index>  3350320) then return "Priesterkaiserzeit" end
  if (index>   539999) then return "Zeit der Klugen Kaiser" end
  if (index>      207) then return "Reichsgründung" end
  if (index> -5659999) then return "Dunkle Zeiten und spätes Altes Reich" end
  if (index>-17000000) then return "Besiedlungszeit" end
  return "Vorzeiten"
 end

 --Gibt die Periodenzahl nach dem Jahr, Monat, Tag zurück
 local periodenzahl=function(index)
  if (index> 10280915) then return "Periode15" end
  if (index> 10100909) then return "Periode14" end
  if (index>  9920315) then return "Periode13" end
  if (index>  9749999) then return "Periode12" end
  if (index>  9489999) then return "Periode11" end
  if (index>  9329999) then return "Periode10" end
  if (index>  9029999) then return "Periode09" end
  if (index>  7729999) then return "Periode08" end
  if (index>  5959999) then return "Periode07" end
  if (index>  4659999) then return "Periode06" end
  if (index>  3350320) then return "Periode05" end
  if (index>   539999) then return "Periode04" end
  if (index>      207) then return "Periode03" end
  if (index> -5659999) then return "Periode02" end
  if (index>-17000000) then return "Periode01" end
  return "Periode00"
 end

 function p.formatzeitindex()
  frame=mw.getCurrentFrame()
  zeit=tonumber(frame.args['ZeitIndex'])
  if (tonumber(zeit)==nil) then return "" end
  gnau=tonumber(frame.args['Genauigkeit'])
  j=math.floor(zeit/10000)
  m=math.floor((zeit-j*10000)/100)
  t=zeit-j*10000-m*100
  return formatdatum(t,m,j,gnau)
 end
  
 function p.DatumTextTMJG()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  datum=decodedatum(dat)
  gen=frame.args['Genauigkeit']
  if(gen=='') then gen=datum['genauigkeit'] end
  if(gen==nil) then gen=datum['genauigkeit'] end
  if(type(gen)~='number') then gen=tonumber(gen) end
  if(datum['error']==nil) then 
   return formatdatum(datum['tag'],datum['monat'],datum['jahr'],gen)
  else
  return datum['error']
  end
 end

 function p.DatumIndexTMJG()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  datum=decodedatum(dat)
  if(datum['error']==nil) then
   return indexdatum(datum['tag'],datum['monat'],datum['jahr'],datum['genauigkeit'])
  else
   return datum['error']
  end
 end

 function p.DatumPeriodeTMJG()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  datum=decodedatum(dat)
  if(datum['error']==nil) then
   return periode(datum['tag'],datum['monat'],datum['jahr'],datum['genauigkeit'])
  else
   return datum['error']
  end
 end

 function p.DatumPeriodenzahlTMJG()
  frame=mw.getCurrentFrame()
  dat=frame.args['DatumIndex']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  return periodenzahl(tonumber(dat))
 end

 function p.DatumTagTMJG()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  datum=decodedatum(dat)
  if(datum['error']==nil) then
   return indextag(datum['tag'],datum['monat'],datum['jahr'],datum['genauigkeit'])
  else
   return datum['error']
  end
 end

 function p.DatumAlterTMJG()
  frame=mw.getCurrentFrame()
  dat1=frame.args['Tsa']
  dat2=frame.args['Boron']
  num=frame.args['Nummer']
  if((num=='')or(num==nil)) then
   num=false
  else
   num=true
  end
  if((dat1=='')or(dat1==nil)) then return '' end
  datum1=decodedatum(dat1)
  if((dat2=='')or(dat2==nil)) then
   datum2=aktuellesdatum()
  else
   datum2=decodedatum(dat2)
  end 
  if((datum1['error']==nil)and(datum2['error']==nil)) then
   g=math.max(datum1['genauigkeit'],datum2['genauigkeit']);
   return alter(datum1['tag'],datum1['monat'],datum1['jahr'],
   	            datum2['tag'],datum2['monat'],datum2['jahr'],g,num)
  else
   if(datum1['error']==nil) then datum1['error']='' end
   if(datum2['error']==nil) then datum2['error']='' end
   return datum1['error']..datum2['error']
  end
 end

 function p.DatumAktuell()
  frame=mw.getCurrentFrame()
  g=frame.args['Genauigkeit']
  if((g=='')or(g==nil)) then g='0' end
  gen=tonumber(g)
  datum=aktuellesdatum()
  return formatdatum(datum['tag'],datum['monat'],datum['jahr'],gen)
 end 

 function p.DatumAktuellTag()
  frame=mw.getCurrentFrame()
  datum=aktuellesdatum()
  return indextag(datum['tag'],datum['monat'],datum['jahr'],datum['genauigkeit'])
 end 

 function p.DatumSortierwert()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  zet=frame.args['Zeit']
  if(zet=='') then zet='0' end
  if(zet==nil) then zet='0' end

  datum=decodedatum(dat)
  zeit=decodezeit(zet)
  if(datum['error']==nil) then
   result=datum['jahr']*365+(datum['monat']-1)*30+(datum['tag']-1)+(zeit['stunde']*60*60+zeit['minute']*60+zeit['sekunde'])/86400
   resultstring=tostring(result)
   split=mw.text.split(resultstring,'.',true)
   if(#split~=2) then 
    return resultstring
   end
   return split[1]..","..split[2]
  else
   return datum['error']
  end
 end

 function p.DatumSortierwertE()
  frame=mw.getCurrentFrame()
  dat=frame.args['Datum']
  if(dat=='') then return '' end
  if(dat==nil) then return '' end
  zet=frame.args['Zeit']
  if(zet=='') then zet='0' end
  if(zet==nil) then zet='0' end

  datum=decodedatum(dat)
  zeit=decodezeit(zet)
  if(datum['error']==nil) then
   result=datum['jahr']*365+(datum['monat']-1)*30+(datum['tag']-1)+(zeit['stunde']*60*60+zeit['minute']*60+zeit['sekunde'])/86400
   resultstring=tostring(result)
   return resultstring
  else
   return datum['error']
  end
 end

 function p.ZeitTextHMSG()
  frame=mw.getCurrentFrame()
  zet=frame.args['Zeit']
  if(zet=='') then return '' end
  if(zet==nil) then return '' end
  zeit=decodezeit(zet)
  gen=frame.args['Genauigkeit']
  if(gen=='') then gen=zeit['genauigkeit'] end
  if(gen==nil) then gen=zeit['genauigkeit'] end
  if(type(gen)~='number') then gen=tonumber(gen) end
  if(zeit['error']==nil) then 
   return formatzeit(zeit['stunde'],zeit['minute'],zeit['sekunde'],gen)
  else
   return zeit['error']
  end
 end
 
 return p