result := Date - DayOfWeek(Date);
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. Zudem wird eine Portierung in eine andere Sprache hier vermutlich nicht funktionieren.
So schön, minimalistisch und elegant Uwes Lösung auch ist, ich würde vielleicht doch eine Schleife bevorzugen:
Delphi-Quellcode:
Function LastSaturday(Date : TDateTime) : TDateTime;
Const
DaySaturday = 7;
Begin
Result := Date - 1;
While DayOfWeek(Result) <> DaySaturday do Result := Result - 1;
End;
Hier ist es vollkommen egal, was DayOfWeek liefert (enum, integer, string etc.) Die Version läuft immer und überall (solange es Samstage gibt).
Alternative: ISO-8601-Routine verwenden;
Delphi-Quellcode:
function LastSaturday (aDate : TDateTime) : TDateTime;
Var
LastSunday : TDateTime;
Begin
LastSunday := EndOfTheWeek(aDate-7);
Result := LastSunday - 1;
End;
Laut ISO ist der letzte Tag der Woche der Sonntag. Und die ISO ändert sich nicht, außer bei Übernahme durch Außerirdische/Nordkorea.