Schon wieder: Rechnen mit Datum Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Schon wieder: Rechnen mit Datum

04 Aug 2016, 15:28

Hallo zusammen,

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
Danke schon mal im Voraus.
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
wolf_II
Posts: 2688
Joined: 08 Feb 2015, 20:55

Re: Schon wieder: Rechnen mit Datum

04 Aug 2016, 15:50

Der Fehler liegt daran dass Du traditional syntax mit expression syntax verbindest. Dies hier += 1, D ist traditional, der opertor := ist expression.
Auf jeweils zwei Zeilen verteilt, pass alles.

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%
	EDatum += 1, D
	TDatum2 := EDatum
	;Msgbox %EDatum%
	FormatTime, TDatum2, %TDatum2%, ddd., dd.MM.yyyy
	EDatum += 1, D
	TDatum3 := EDatum
	;Msgbox %EDatum%
	FormatTime, TDatum3, %TDatum3%, ddd., dd.MM.yyyy
	Msgbox %TDatum1%`r%TDatum2%`r%TDatum3%
}
Else
	MsgBox Bitte korrektes Datum eingeben.
Return
User avatar
LuckyJoe
Posts: 265
Joined: 02 Oct 2013, 09:52

Re: Schon wieder: Rechnen mit Datum  Topic is solved

05 Aug 2016, 01:10

:headwall:
... jau! Danke, funktioniert perfekt!
Herzliche Grüße aus dem Rheinland
Lucky Joe

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 45 guests