Vor ein paar Tagen fiel mir mal wieder das leidige Thema MESZ ein. Ähnlich wie bei Ostern hatte ich mir nie wirklich Gedanken darum gemacht, wann denn nun das nächste Mal die Uhrzeit umgestellt wird. Windows wird es schon richten und ich würde mich wieder zwei Wochen lang mit der Zeitverschiebung rumschlagen... ;-)
Ein kurzer Blick in die Wikipedia und schon wußte ich: Es sind (mittlerweile europaweit) zwei Fixtermine, nämlich jeweils der letzte Sonntag im März und im Oktober. Und schon überlegte ich, wie man diese beiden Tage wohl im Fux berechnet...
Im folgenden also der kurze Mustercode auf Basis einer kleinen Funktion:
CLEAR
?GetLastSundayOfMonth({15/03/2010})
?GetLastSundayOfMonth()
FUNCTION GetLastSundayOfMonth as Date
LPARAMETERS vDate as Date
* // Sicherstellen, dass wir ein Datum
* // zur Berechnung verfügbar haben
vDate = EVL(vDate,DATE())
* // nun setzen wir das übergebene Datum
* // auf den 1. Tag des Folgemonats
* // Korrektur gem. Gustavs Hinweis, da mein Originalcode
* // einen Jahreswechsel zum Folgemonat nicht berücksichtigte
vDate = DATE(YEAR(GOMONTH(vDate,1)),MONTH(GOMONTH(vDate,1)),1)
* // Abschliessend geben wir das Datum
* // um den Wochentag reduziert zurück.
* // Dies ergibt automatisch den voran-
* // gegangenen Sonntag.
RETURN vDate - DOW(vDate,2)
ENDFUNC
Hallo,
AntwortenLöschenist leider nicht ganz richtig...
wenn z.B. vDate nun der 31.12 wäre, würde es bei denen Zeilen ein Fehler geben...
hier mal die richtige Version
FUNCTION GetLastSundayOfMonth as Date
LPARAMETERS vDate as Date
* // Sicherstellen, dass wir ein Datum
* // zur Berechnung verfügbar haben
vDate = EVL(vDate,DATE())
* // nun setzen wir das übergebene Datum
* // auf den 1. Tag des Folgemonats
vDate = DATE(YEAR(GOMONTH(vDate,1)),MONTH(GOMONTH(vDate,1)),1)
* // Abschliessend geben wir das Datum
* // um den Wochentag reduziert zurück.
* // Dies ergibt automatisch den voran-
* // gegangenen Sonntag.
RETURN vDate - DOW(vDate,2)
ENDFUNC
Hallo Gustav,
AntwortenLöschendanke für die Info. An einen Jahreswechsel hatte ich in Hinblick auf die Sommerzeitfrage gar nicht gedacht. Ich werde den Code im Blogeintrag entsprechend korrigieren!!