Schon wieder: Rechnen mit Datum

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Schon wieder: Rechnen mit Datum

Re: Schon wieder: Rechnen mit Datum

Post by LuckyJoe » 05 Aug 2016, 01:10

:headwall:
... jau! Danke, funktioniert perfekt!

Re: Schon wieder: Rechnen mit Datum

Post by wolf_II » 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

Schon wieder: Rechnen mit Datum

Post by LuckyJoe » 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

Top