![]() |
nächster oder vorhergehender Arbeitstag
hier zeige ich zwei Funktionen zur Berechnung des nächsten oder vorhergehenden Arbeitstags.
Arbeitstage sind Montag bis Freitag :spin2: Feiertage werden über eine Callback-Funktion ausgefiltert. Man kann auch ohne Callback-Funktion arbeiten; dann könnten Feiertage allerdings als Arbeitstage angesehen werden. Zuerst die Deklarationen im Interface:
Delphi-Quellcode:
und nun die eigentlichen Funktionen:
// callback function for holidays
THolidayCallback = function(const d: TDateTime): boolean; function PrevWorkingDay(const date:TDateTime; callback:THolidayCallback): TDateTime; function NextWorkingDay(const date:TDateTime; callback:THolidayCallback): TDateTime;
Delphi-Quellcode:
Und zu guter Letzt ein Beispiel für die Callback-Funktion und ein Anwendungsbeispiel:
function PrevWorkingDay(const date: TDateTime; callback: THolidayCallback): TDateTime;
begin Result := Int(date) - 1.0; // = Gestern if Assigned(callback) then while (DayOfWeek(Result) in [1,7]) or callback(Result) do Result := Result - 1.0 else while (DayOfWeek(Result) in [1,7]) do Result := Result - 1.0; end; function NextWorkingDay(const date: TDateTime; callback: THolidayCallback): TDateTime; begin Result := Int(date) + 1.0; // = Morgen if Assigned(callback) then while (DayOfWeek(Result) in [1,7]) or callback(Result) do Result := Result + 1.0 else while (DayOfWeek(Result) in [1,7]) do Result := Result + 1.0; end;
Delphi-Quellcode:
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
function IsHoliday(const d: TDateTime): boolean;
var year, month, day; begin Result := False; DecodeDate(d, year, month, day); if (month = 12) and ((day = 25) or (day = 26)) then result := True // christmas else if (month = 12) and (day = 31) then result := True // sylvester else if (month = 1) (day = 1) then result := True else begin // weitere Abfragen // z.B. in einer Datenbank Tabelle nachschauen end; end; procedure Test; begin ShowMessage('nächster Arbeitstag: ' + DateToStr(NextWorkingDay(Now, IsHoliday))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz