Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Werktage Berechnung (https://www.delphipraxis.net/159977-werktage-berechnung.html)

youuu 21. Apr 2011 07:27

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)

schlecki 21. Apr 2011 07:31

AW: Werktage Berechnung
 
Mal als Ansatz: klick

himitsu 21. Apr 2011 07:34

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

leddl 21. Apr 2011 08:12

AW: Werktage Berechnung
 
Zitat:

Zitat von youuu (Beitrag 1096304)
Wie kann ich nun die Anzahl der Werktage berechnen?

Das Wäre in dem Beispiel: 15 Tage (Montag - Freitag)

:gruebel: WERKtage oder ARBEITStage? Unter Werktagen versteht man in Deutschland üblicherweise Montag - Samstag, Montag bis Freitag werden als Arbeitstage bezeichnet.

Als Näherung (Feiertage werden nicht betrachtet) für die Werktage nehmen wir hier folgende Formel:
Code:
x = Anzahl der Tage
y = Wochentag Startdatum (0 = Sonntag, 1 = Montag, ... 6 = Samstag)

Werktage = x - abrunden( (x + y - 7) / 7) - 1
Funktioniert aber AFAIR erst bei mehr als einer Woche - was bei uns keine Rolle spielte, daher haben wir da nicht mehr optimiert.

youuu 21. Apr 2011 08:36

AW: Werktage Berechnung
 
So habe mir mal diese kleine Funktion gebastelt.

Delphi-Quellcode:
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;
Feiertage mal außen vor gelassen

Deep-Sea 21. Apr 2011 08:40

AW: Werktage Berechnung
 
Delphi-Quellcode:
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;
Sollte auch gehen :-D
(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 03:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz