Manchmal muss man aber mit Datumzeitangaben auch rechnen, um z.B. das Datum des Tages harauszufinden der 6 Wochen nach einem vorgegebenen Datum liegt. Dafür gibt es zwei Dinosaurier, die Anweisungen
Code: Select all
EnvAdd, Var, Wert, Zeiteinheit
EnvSub, Var, Wert, Zeiteinheit
Code: Select all
Var += Wert, Zeiteinheit
Var -= Wert, Zeiteinheit
Obwohl die 'modernen' Formen mit dem += Operator einem Ausdruck recht ähnlich sehen, sind sie wie Kommandos zu behandeln, d.h. sie können z.B. nicht in per Komma verketteten Ausdrücken verwendet werden. Außerdem darf der erste Parameter Wert kein Ausdruck sein. Im der Folge werden auschließlich diese Formen verwendet.
Bei beiden Anweisungen muss man immer daran denken, dass das Egebnis in der Variablen Var abgelegt wird, diese also verändert. Wenn man den ursprünglichen Wert später noch braucht, sollte man also immer eine eigene Variable für die Rechnerei benutzen.
Zeitstempel:
AHK behandelt die Zeitstempel in den dafür vorgesehehen Anweisungen sehr großzügig. So wird eine leere Variable bzw. ein leerer Wert immer mit dem aktuellen Zeitstempel gefüllt. Verkürzte Zeitstempel werden für die Bearbeitung aufgefüllt. So werden aus:
- 2014 -> 20140101000000
- 201405 -> 20140501000000
- 20141112 -> 20141112000000
Addieren und Subtrahieren von Zeiteinheiten:
Für das Addieren und Subtrahieren von Zeiteinheiten zu/von einem gegebenen Zeitstempel ist Var += Wert, Zeiteinheit da.
Die Variable Var muss dabei einen gültigen Zeitstempel bzw. den Anfang eines gültigen Zeitstempels enthalten. Sie darf auch gänzlich sehr sein, dann wird der vollständige aktuelle Zeitstempel verwendet.
Der Parameter Wert bestimmt die Anzahl der Zeiteinheiten. Weil += Form auch für die Subtraktion genutzt werden muss, muss der Wert dafür mit negativem Vorzeichen angegeben werden.
Der Parameter Zeiteinheit] bestimmt die Zeiteinheit. Dafür sind folgende Angaben möglich:
- S(seconds) - Sekunden
- M(inutes) - Minuten
- H(ours) - Stunden
- D(ays) - Tage
Damit ist das Wesenliche auch schon abgehandelt. Will man 14 Tage zum heutigen Datum addieren, nehme man
Code: Select all
Heute := A_Now ; oder auch Heute := ""
Heute += 14, D
Code: Select all
Heute := A_Now ; oder auch Heute := ""
Heute += -14, D ; man beachte das Minuszeichen
Für das Bilden von Differenzen zwischen zwei Zeitstempeln ist Var -= Wert, Zeiteinheit da.
Die Variable Var muss dabei einen gültigen Zeitstempel bzw. den Anfang eines gültigen Zeitstempels enthalten. Sie darf auch gänzlich sehr sein, dann wird der vollständige aktuelle Zeitstempel verwendet.
Der Parameter Wert muss hier auch einen gültigen Zeitstempel bzw. den Anfang eines gültigen Zeitstempels enthalten. Er darf auch gänzlich sehr sein, dann wird der vollständige aktuelle Zeitstempel verwendet.
Der Parameter Zeiteinheit] bestimmt hier die Zeiteinheit, in der die Differenz gebildet werden soll. Die möglichen Werte entsprechen den oben aufgeführten.
Will man die Differenz vom 19.07.2015 zum heutigen Datum in Tagen berechnen, nimmt man
Code: Select all
Datum1 := A_Now ; oder auch ""
Datum2 := 20150719
Datum1 -= %Datum2%, D ; D = Tage
MsgBox, 0, Differenz, Seit dem 19.07.2015 sind %Datum1% Tage vergangen.
Wie oben beschrieben, liefert AHK einige integrierte Variablen, die sich auf das aktuelle Datum bzw. die aktuelle Zeit beziehen. Für andere Daten/Zeiten kann man diese Werte über die Anweisung FormatTime mit den dort angegebenen Datums- bzw. Zeitformaten bekommen. Abgesehen von Unterschieden bei der Groß/Kleinschreibung reicht es in vielen Fällen, als Ausgabeformat den Namen der integrierten Variablen ohne das führende A_ zu nutzen. So bestimmt
Code: Select all
FormatTime, AusgabeVar, 20150719, WDay
If Var Is Time:
Damit kann man prüfen, ob eine Variable einen gültigen Zeitstempel enthält. Statt Time kann man auch Date nehmen, wenn das besser passt. Anders als bei den oben beschriebenen Anweisungen wird eine leere Variable allerdings nicht durch den aktuellen Zeitstempel ersetzt. If Var Is Time liefert in diesem Fall Falsch, obwohl die Variable problemlos in den anderen Anweisungen genutzt werden könnte.