Wozu Trunc?
Für das bessere Codeverständnis würde ich eher zu
DateOf raten,
aber wozu überhaupt? In EncodeDate kann es keinen Uhrzeit-Anteil geben.
@Michael: Kennst du schon den Unterschied zwischen
SysUtils.DayOfWeek und
DateUtils.DayOfTheWeek?
Da dort der Wochenanfang dem Wunschtag dieser Funktion entspricht, entfällt somit das ELSE.
Delphi-Quellcode:
function FirstMondayOfMonth(Year, Month: Integer): TDateTime;
var
Dow: Integer;
begin
Result := EncodeDate(Year, Month, 1);
Dow := DayOfTheWeek(Result);
if Dow <> DayMonday then
Result := IncDay(Result, DaysPerWeek + 1 - Dow);
end;
function FirstMondayOfMonth(Date: TDateTime): TDateTime;
var
Dow: Integer;
begin
Result := RecodeDay(Date, 1);
Dow := DayOfTheWeek(Result);
if Dow <> DayMonday then
Result := IncDay(Result, DaysPerWeek + 1 - Dow);
end;
function FirstMondayOfMonth(Date: TDateTime): TDateTime;
var
Dow: Integer;
begin
Date := RecodeDay(DateOf(Date), 1);
Result := StartOfTheWeek(Date);
if Result < Date then
Result := IncWeek(Result); // Result := IncDay(Result, DaysPerWeek);
end;
DaysPerWeek + 1 wird vom Compiler zu 8 optimiert, aber so ist verständlicher was das soll,
und eine Konstante für Montag, statt dem komischen 2, vereinfacht auch das Leben und schon kann dein Kommentar weg, was welche Zahl bedeuten soll. (wobei Standardsachen aus der
OH nicht unbedingt in Kommentare gehören)