Dieser Funktion übergibt man das Jahr, den Monat und den Wochentag von dem man wissen möchte wann der letzte davon im Monat ist.
Als Ergebnis bekommt man das Datum (TDatetime) dieses letzen Tages.
Die Wochendatge sind nach der alten Weise vergeben. 1-7 wovon 1 der Sonntag ist.
Für das geforderte Problem würde man die 5 für Donnerstag als letzten Parameter übergeben.
Da hier keine Schleifen, sondern nur eine verkettete If Abfrage sowie eine Addition, bzw. Subtraktion verwendet wird,
dürfte diese Funktion auch recht schnell sein.
Delphi-Quellcode:
Function GetLastWeekDayOfMonth(yyyy,mm,d:Integer):TDatetime;
Var Adate:TDatetime;
y,m,z:Integer;
begin
z:=DayOfWeek(DateUtils.EndOfAMonth(yyyy,mm));
if z=d then
begin
Result:=DateUtils.EndOfAMonth(yyyy,mm);
end
else
if z>d then
begin
z:=z-d;
Result:=DateUtils.EndOfAMonth(yyyy,mm)-z;
end
else
begin
z:=z-d;
Result:=DateUtils.EndOfAMonth(yyyy,mm)-z-7;
end;
end;