Werktage zählen
Hey Leute,
ich möchte die Werktage zwischen zwei eingegebenen Datumswerte zählen. Weiss leider nicht wie? Um die Anzahl zu bekommen habe ich es mal so angefangen:
Delphi-Quellcode:
Mein Problem: Ich möchte kein Wochenende mitzählen!!
a := StrToDate(Edit1.Text); //Startdatum
b := StrToDate(Edit2.Text); //EndDatum i := trunc(b)- trunc(a); Label5.Caption := 'Beantragte Tage incl. Wochenende: '+ IntToStr(i+1); Mfg Norbert |
Re: Werktage zählen
Hey,
Mit
Delphi-Quellcode:
bekommst du den Wochentag raus.
datum := DayOfWeek(Edit1.Text)
Delphi-Quellcode:
case datum of
1: ...; // Sonntag 2: ...; // Montag 3: ...; // Dienstag 4: ...; // Mittwoch 5: ...; // Donnerstag 6: ...; // Freitag 7: ...; // Samstag Else ... end; Mit den Integerwerten musst Du halt weitermachen. |
Re: Werktage zählen
Und vielleicht hiltf Dir dabei auch dies Feiertage anzeigen
|
Re: Werktage zählen
Hey ,
mit DayOfWeek habe ich es schon probiert. Da erhalte ich aber nur den 1. Tag. Wie bekommt man das hin, dass die Tage automatisch eventl. in einer Schleife bis zum Enddatum durchlaufen und auf ihren Wert geprüft werden? Norbert |
Re: Werktage zählen
Zitat:
Delphi-Quellcode:
function CountWeekDays (Datum1, Datum2 : TDateTime) : integer ;
var i : integer ; function IstWerkTag (Datum : TDateTime) : boolean ; begin Result := not (DayOfWeek (Datum) in [1,7]) ; // 1=Sonntag, 7=Samstag // Hier kannst Du eventuell noch auf Feiertag prüfen end ; begin Result := 0 ; for i := trunc(Datum1) to trunc(Datum2) do begin if IstWerkTag(i) then inc (Result) ; end ; end ; procedure TForm13.Button1Click(Sender: TObject); var D1, D2 : TDateTime ; begin D1 := EncodeDate (2006,1,1) ; D2 := EncodeDate (2006,12,31) ; caption := IntToStr (CountWeekDays (D1, D2)) ; end; |
Re: Werktage zählen
Hier noch etwas Code, der ohne brute force auskommt:
Delphi-Quellcode:
Grüße vom marabu
uses
DateUtils; // DayOfTheWeek(1) = Montag function DaysBetweenEx(d1, d2: Cardinal): Cardinal; // SA und SO werden nicht gezählt var n, r, wd: Cardinal; begin n := Succ(DaysBetween(Trunc(d1), Trunc(d2))); Result := n - (n div 7) shl 1; r := n mod 7; if r = 0 then Exit; if d2 > d1 then wd := DayOfTheWeek(d1) else wd := DayOfTheWeek(d2); n := Pred(wd + r); if 6 in [wd, n] then Dec(Result); if 7 in [wd, n] then Dec(Result); end; |
Re: Werktage zählen
Hey,
erstmal danke für die schnellen Antworten. @Jelly: wie gelingt es mir , die zwei Eingabefelder einzubinden? mit einfach:
Delphi-Quellcode:
klappt es nicht.
a := StrToDate(Edit1.Text);
Was mache ich falsch?? Norbert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 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