Einzelnen Beitrag anzeigen

Amateurprofi
Online

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.063 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Den letzten Donnerstag eines Monats

  Alt 26. Dez 2017, 15:48
Ich hab mir das noch einmal angeschaut und die Funktion aus #9 optimiert.
Die neue Version ist noch einmal fast doppelt so schnell und ist auch verständlicher aufgebaut.

Delphi-Quellcode:
FUNCTION LastWeekDayOfMonth(Year,Month,WeekDay:Word):TDateTime;
const Days:Array[1..12] of Integer=(31,59,90,120,151,181,212,243,273,304,334,365);
var DN,DoW:Integer;
begin
   DN:=Days[Month];
   if (Month>=2) and ((Year Mod 4=0) and (Year mod 100<>0) or (Year mod 400=0)) then Inc(DN);
   Dec(Year);
   Inc(DN,Year*365 + Year div 4 - Year div 100 + Year div 400);
   DoW:=(6+DN) mod 7;
   if WeekDay>DOW then Dec(DN,7-WeekDay+DoW) else Dec(DN,Dow-WeekDay);
   Result:=DN-System.SysUtils.DateDelta;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat