Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Arbeitstage berechnen (https://www.delphipraxis.net/38878-arbeitstage-berechnen.html)

LogoPie 25. Jan 2005 15:57


Arbeitstage berechnen
 
Hallo Leutz

Ich möchte anhand von von zwei Daten sprich z.B. 02.01.05 und 12.02.05
die Arbeitz bzw. die Urlaubstage Berechnen.
Wie stelle ich das an hat jemand ein Beispiel.
Natürlich ohne Wochendende und Feiertage.

Sharky 25. Jan 2005 15:59

Re: Arbeitstage berechnen
 
Hai LogoPie,

als erstes brauchst Du eine Liste aller Feiertage (abhängig vom Bundesland) Dann könntest Du einfach in einer Schleife prüfen ob das Datum X ein Arbeitstag ist.

toms 25. Jan 2005 16:00

Re: Arbeitstage berechnen
 
Delphi-Quellcode:
Function NumWorkDays( StartDate,EndDate:TDateTime):LongInt;
Var Workdays:LongInt;
Begin
  WorkDays := 0;
  While StartDate <= EndDate do Begin
    If DayOfWeek(StartDate) in [2..6] Then
       Inc( WorkDays );
    StartDate := StartDate + 1;
  End;
  Result := WorkDays;
End;
(Feiertag Pruefung muss noch eingebaut werden)

LogoPie 26. Jan 2005 10:11

Re: Arbeitstage berechnen
 
schon mal vielen dank,
Aber wie krieg ich das in mein Programm.
Habe drei TEdit felder.
In die ersten beiden soll der Benutzer das Datum von bis eingeben (12.01.05 bis 29.01.05)
Die Rechnung soll durch einen Button ausgelöst werden.
Ergebnis soll im dritten Edit angezeit werden.
Ergebnis wäre 13 Urlaubstage ohne Wochenende [2..6]
gruß LogoPie

Sharky 26. Jan 2005 10:15

Re: Arbeitstage berechnen
 
Hai LogoPie,

ich würde für die Datumseingabe keine Edits nehmen sonder TDateTiemPicker. Dann einfach mit dem Code von toms:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  EditTage.Text := IntToStr (NumWorkDays (DateTimePicker1.Date,DateTimePicker2.Date));
end;

LogoPie 26. Jan 2005 11:43

Re: Arbeitstage berechnen
 
Juhu klappt wunder bar
Hier mal das Gesamtergebnis für alle anderen.
Delphi-Quellcode:
Function Arbeitstage( Beginn,Ende:TDateTime):LongInt;
Var Tage:Integer;    
    i  :Integer;
Begin
  Tage := 0;
  i   := 1;
  While Beginn <= Ende do Begin    
    If DayOfWeek(Beginn) in [2..6] Then    
    Inc( Tage );
    Beginn := Beginn + i;
  End;
  Result := Tage;
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
     EditTage.Text := IntToStr (Arbeitstage (Beginn.Date,Ende.Date));
end;

end.
Nun stehe ich schon vor dem nächsten Problem
das heißt es ist nur ein kleines.
Das einbinden von Feiertagen.
Bei festen Tagen wie Silvester oder Weihnachten sollte es keine Probleme geben,
aber wie berechne ich z.B Pfingsten oder Ostern.

Treffnix 26. Jan 2005 11:49

Re: Arbeitstage berechnen
 
Für Ostern gibt es hier eine Funktion von Flomei. Pfingsten lässt sich glaube ich aus Ostern berechnen ( + 40 Tage oder so? :gruebel: ). Karfreitag ist Ostersonntag - 2, Ostermontag ist logischerweise Ostersonntag + 1 ( :shock: ).
Heiligabend, Weihnachten, Silvester, 1.Mai sind dagegen wahnsinnig kompliziert :zwinker:

*edit* mir fällt gerade ein, dass das mit den 40 Tagen die Fastenzeit war, und 40 Tage nach Ostern auch gar kein Wochenende ist, aber Pfingsten ist afair auch irgendwie abhängig von Ostern.

kiar 26. Jan 2005 11:55

Re: Arbeitstage berechnen
 
schau bei den schweizern

http://www.swissdelphicenter.ch/de/showcode.php?id=1278

raik

Sharky 26. Jan 2005 11:56

Re: Arbeitstage berechnen
 
Hai,

wie Treffnix schon sagte sind die meisten Kirchlichen-Feiertage von Ostern abgeleitet. Dafür findest Du sicher eine Liste.
Aber wie ich schon sagte: Du musst die Regelungen der einzelnen Bundesländer beachten.

kiar 26. Jan 2005 12:01

Re: Arbeitstage berechnen
 
und hier noch ne erweiterung

http://www.swissdelphicenter.ch/de/f...sche+feiertage

raik


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Seite 1 von 2  1 2      

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