Jupp, drumm hatte ich auch beide Funktionen erwähnt und verlinkt.
Wennde die noch für 64-bit schreibst, dann bekommste auch nen Fleißbienchen in dein Aufgabenheft:
ARM (iOS, Android), Mac und Linux nicht vergessen.
Das wär die Bonusaufgabe für Streber gewesen
P.S. Die Lösung von Uwe in ne Methode verpackt (wenn man will noch nen inline dran geklatscht) ist sogar ein paar Ticks schneller als die
asm Implementierung. Soviel zu "ick schreib det ma in assembla, det is schnella"
Eine schöne Lösung, die aber stillschweigend davon ausgeht, das der Samstag mit 7 kodiert wird. Ändert sich das irgendwann, funktioniert die Lösung nicht mehr. Das ist zwar unwahrscheinlich (das sich das ändert), aber denkbar.
Das ist fast genauso wahrscheinlich wie eine "Übernahme durch Außerirdische/Nordkorea."
Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
LastSunday : TDateTime;
Begin
LastSunday := EndOfTheWeek(aDate-7);
Result := LastSunday - 1;
End;
EndOfTheWeek ruft übrigens StartOfTheWeek auf, was wiederrum DayOfTheWeek aufruft.
Dann doch lieber gleich:
Delphi-Quellcode:
function LastSaturday(aDate: TDateTime): TDateTime;
begin
Result := aDate - DayOfTheWeek(aDate) - 1;
end;