![]() |
Werktage Berechnung
Hi,
ich habe z.B das Datum 01.04.2011 und das heutige Datum 21.04.2011. Wie kann ich nun die Anzahl der Werktage berechnen? Das Wäre in dem Beispiel: 15 Tage (Montag - Freitag) |
AW: Werktage Berechnung
Mal als Ansatz:
![]() |
AW: Werktage Berechnung
- jetzt bis zum nächsten Sonntag/Wochen-Ende rechnen (wenn kleiner Enddatum, ansonsten aufpassen).
- das Selbe noch mal vom letzen Montag/Wochen-Anfang (also der vom Enddatum, hier ebenfalls auf das Startdatum und eine eventuelle Überschneidung achten) - nur die Wochen dazwischen zählen/ausrechnen und mal 5 (Arbeitstage) rechnen - nun eventuell noch die dazwischenliegenden Feiertage, Urlaubstage usw. suchen und abziehen Du kannst natürlich auch in einer For-Schleife von Anfang bis Ende durchlaufen und jeden Tag einzeln prüfen ... wenn Mo-Fr, dann +1 oder in einer While-Schleife mit NextArbeitstag durchlaufen, bis zum Ende und dabei die Durchläufe zählen |
AW: Werktage Berechnung
Zitat:
Als Näherung (Feiertage werden nicht betrachtet) für die Werktage nehmen wir hier folgende Formel:
Code:
Funktioniert aber AFAIR erst bei mehr als einer Woche - was bei uns keine Rolle spielte, daher haben wir da nicht mehr optimiert.
x = Anzahl der Tage
y = Wochentag Startdatum (0 = Sonntag, 1 = Montag, ... 6 = Samstag) Werktage = x - abrunden( (x + y - 7) / 7) - 1 |
AW: Werktage Berechnung
So habe mir mal diese kleine Funktion gebastelt.
Delphi-Quellcode:
Feiertage mal außen vor gelassen
function Arbeitstage(const startDate: TDate): Integer;
var Days: Integer; i: Integer; begin Days := DaysBetween( startDate, Date() ) + 2; Result := 0; for i := 0 to Days - 1 do begin if DayOfTheWeek (startDate + i) < 6 then Result := Result + 1; end; end; |
AW: Werktage Berechnung
Delphi-Quellcode:
Sollte auch gehen :-D
function Arbeitstage(const startDate: TDate): Integer;
var I: Integer; begin Result := DaysBetween(Trunc(startDate), Trunc(Date)) + 1; For I := 0 to Result - 1 do If DayOfTheWeek(startDate + i) >= 6 then Dec(Result); end; (Bin gerade in Bastel-Laune ^^) Edit #1: Ähm, es muss doch +1 und nicht +2 heißen?! Edit #2: Mir fiel gerade wieder ein, dass DaysBetween ja nicht ganz so arbeitet, wie man es erwartet. Darum sollte man für diesen Anwendungsfall die beiden Parameter vorher mit Trunc bearbeiten (sozusagen die Tageszeit ausradieren). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:04 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