Das Skript ermöglicht die Eingabe eines Datums basierend auf Kürzeln. Dabei ist zunächst die + Taste als Endtaste für die Hotstrings eingestellt was man natürlich leicht anpassen kann.
Das Skript ersetzt u. a. folgende Eingaben ausgehend vom aktuellen Datum (heute ist der 16.07.20):
h+ ergibt 16.07.20
m+ ergibt 17.07.20
g+ ergibt 15.07.20
vg+ ergibt 14.07.20
mo+ ergibt 20.07.20
di-+ ergibt 14.07.20
usw.
Werden nach dem + innerhalb von 1s noch weitere + oder ein # (Nachbartaste) gedrückt, so ändert sich die Schreibweise, z. B.:
üm+ ergibt 18.07.20
üm++ ergibt 18.07.2020
üm+++ ergibt Samstag, den 18. Juli 2020
üm+# ergibt 2020-07-18
Hier der sicher schon etwas angestaubte Code:
Code: Select all
#HOTSTRING EndChars +
;*************************** Zeitwerte **************************************
::vvg:: ; Datum Vorvorgestern
::vg:: ; Datum Vorgestern
::g:: ; Datum Gestern
::h:: ; Datum Heute
::m:: ; Datum Morgen
::üm:: ; Datum Übermorgen
::üüm:: ; Datum Überübermorgen
verschiebung := "-1g -2vg -3vvg +0h +1m +2üm +3üüm" ; Verschiebungswerte für Tageskürzel
STRINGREPLACE, tag, A_THISHOTKEY,:,,ALL ; Tageskürzel aus Hotstringnamen extrahieren
STRINGMID, timeshift, verschiebung, INSTR(verschiebung,tag)-1, 2, L ; passenden Verschiebungswert ermitteln
tag := A_NOW
ENVADD, tag, %timeshift% ,DAYS
datum_variabel_ausgeben(tag)
RETURN
::mo:: ; "nächster Montag"
::di::
::mi::
::do::
::fr::
::sa::
::so::
::mo-:: ; "lezter Montag"
::di-::
::mi-::
::do-::
::fr-::
::sa-::
::so-::
::mo1:: ; "Montag in einer Woche"
::di1::
::mi1::
::do1::
::fr1::
::sa1::
::so1::
::mo2:: ; "Montag in zwei Wochen"
::di2::
::mi2::
::do2::
::fr2::
::sa2::
::so2::
STRINGMID, gesuchter_wochentag, A_THISHOTKEY, 3, 2 ; Wochentag aus Hotstringname extrahieren
tag :=
ENVADD, tag, 1, DAYS ; Basis-Datum (morgen) ermitteln
IF A_THISHOTKEY CONTAINS - ; Basis Datum eine Woche zurück bei "-" - Hotkey
ENVADD, tag, -8, DAYS
ELSE IF A_THISHOTKEY CONTAINS 1 ; Basis Datum eine Woche vor bei "1" - Hotkey
ENVADD, tag, +7, DAYS
ELSE IF A_THISHOTKEY CONTAINS 2 ; Basis Datum zwei Wochen vor bei "2" - Hotkey
ENVADD, tag, +14, DAYS
LOOP, 7 ; Datum zu Wochentag per LOOP ermitteln
{
FORMATTIME, wochentag, %tag%, ddd
IF (gesuchter_wochentag = wochentag)
BREAK
ENVADD, tag, 1, DAYS
}
datum_variabel_ausgeben(tag)
RETURN
datum_variabel_ausgeben(tag)
{
; Datumsvarianten genierieren
FORMATTIME, normales_datum, %tag%, dd.MM.yy ; kurzes Datum 10.09.12
FORMATTIME, datum_jahr_lang,%tag%, dd.MM.yyy ; Jahreszahl vierstellig 10.09.2012
FORMATTIME, inverses_datum, %tag%, yyy-MM-dd ; Jahr vorangestellt 2012-09-10
FORMATTIME, langes_datum, %tag%, LONGDATE ; Langes Datum Montag, 10. September 2012
STRINGREPLACE, langes_datum,langes_datum,`,,`, den
SEND %normales_datum% ; Zunächst kurzes Datum ausgeben (27.06.13)
INPUT, lang, L1 T1 V ; Zusatzeingabe überwachen
IF lang=#
SEND, {BS 9}%inverses_datum% ; ... inverses Datum ausgeben (2013-06-27)
ELSE IF lang=+
{
SEND, {BS 9}%datum_jahr_lang% ; ... zweistellige Jahreszahl durch vierstellige ersetzen (27.06.2013) ...
INPUT, langlang, L1 T1 V ; ... weitere Zusatzeingabe überwachen ...
IFEQUAL,langlang,+, SEND, {BS 11}%langes_datum% ; ... Langes Datum ausgeben (Donnerstag, 27. Juni 2013)
}
INPUT ; Eingabe beenden
}