Wie wär's denn damit?
Delphi-Quellcode:
type
TDayOfWeekSet = set of 0..6;
// Wandelt das Format in ISO 8601 (Montag erster Tag) um
function GetDayOfWeek(const DateTime: TDateTime): ShortInt;
begin
Result := (DayOfWeek(DateTime) + 5) mod 7;
end;
function GetNextAvailableWeekDay(const aExcludeDays: TDayOfWeekSet; StartTimestamp: Integer): Integer;
var
dt: TDateTime;
I: Integer;
begin
dt := UnixToDateTime(StartTimestamp);
for I := 0 to 6 do begin
if not (GetDayOfWeek(dt) in aExcludeDays) then
Exit(DateTimeToUnix(dt));
dt := IncDay(dt);
end;
Result := 0;
end;
procedure TestCase;
var
dt: TDateTime;
begin
dt := UnixToDateTime(GetNextAvailableWeekDay([1..6], DateTimeToUnix(EncodeDate(2017, 08, 31))));
Assert(SameDate(dt, EncodeDate(2017, 09, 04)));
end;
Ist nur so ein Gefühl, aber die negative Logik bei
aExcludeDays würde ich in
aAllowedDays umkehren. Aber das hängt vielleicht auch vom Kontext ab.