ich stehe etwas auf dem Schlauch mit dem Rechnen von Datumsteilen, obwohl ich Dank der Suche hier im Forum schon relativ weit bin.
Mein Script fordert eine Datumseingabe, die das script überprüft. So sollen als Datums-Trennzeichen "./-" zulässig sein.
Auch soll es egal sein, ob Tage oder Monate mit führender "0" eingegeben werden. Wird das Jahr zweistellig eingegeben, wird es auf 4 Stellen erweitert.
Wird das Jahr weggelassen, so wird das aktuelle Jahr angenommen. Das funktioniert auch alles (wahrscheinlich gibt es kürzere und/oder schönere Möglichkeiten).
Nun kommt aber das Problem:
Ich möchte das eingegebene Datum sowie die nächsten beiden Tage formatiert ausgeben. Das klappt nur "fast", nämlich nur, wenn sich die aufeinanderfolgenden Tage innerhalb des gleichen Monats befinden. Ist das Eingabedatum aber z.B. der Monatsletzte, dann funktioniert das nicht.
Wo ist mein Fehler?
Code: Select all
InputBox, EDatum, Eingabe, Datum eingeben (TT-MM[-JJ]):, , 140, 140
if ErrorLevel ; bei Esc/Cancel beenden
Return
StringReplace, EDatum, EDatum, -, ., All ; alle "-" ersetzen durch "."
StringReplace, EDatum, EDatum, /, ., All ; alle "/" ersetzen durch "."
DatumArray := StrSplit(EDatum, ".") ; Datum bei "." splitten
Loop % DatumArray.MaxIndex() ; Datums-Teile holen
myDay := SubStr("00" . DatumArray[1], -1) ; ggf. mit führender 0 auffüllen
myMonth := SubStr("00" . DatumArray[2], -1) ; ggf. mit führender 0 auffüllen
If % DatumArray.MaxIndex() = 2 ; wenn nur 2 Teile (Tag + Monat)
myYear := A_Now ; dann ist aktuelles Jahr gemeint
Else
myYear := SubStr("20" . DatumArray[3], -3) ; "20" voransetzen, wenn zweistellig
FormatTime, MyYear, %myYear%, yyyy ; Jahr formatieren
EDatum = %MyYear%%MyMonth%%MyDay% ; Eingabe als Datum zusammensetzen
if EDatum is Date ; bei gültigem Datum
{
FormatTime, TDatum1, %EDatum%, ddd., dd.MM.yyyy
;Msgbox %EDatum%
TDatum2 := EDatum += 1, D
;Msgbox %EDatum%
FormatTime, TDatum2, %TDatum2%, ddd., dd.MM.yyyy
TDatum3 := EDatum += 1, D
;Msgbox %EDatum%
FormatTime, TDatum3, %TDatum3%, ddd., dd.MM.yyyy
Msgbox %TDatum1%`r%TDatum2%`r%TDatum3%
}
Else
MsgBox Bitte korrektes Datum eingeben.
Return
Lucky Joe