AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Werktage zählen

Ein Thema von norbert3 · begonnen am 9. Jul 2006 · letzter Beitrag vom 9. Jul 2006
Antwort Antwort
Benutzerbild von norbert3
norbert3

Registriert seit: 24. Mai 2006
Ort: Sachsen
65 Beiträge
 
Delphi 7 Enterprise
 
#1

Werktage zählen

  Alt 9. Jul 2006, 13:30
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:
a := StrToDate(Edit1.Text); //Startdatum
b := StrToDate(Edit2.Text); //EndDatum
i := trunc(b)- trunc(a);
  Label5.Caption := 'Beantragte Tage incl. Wochenende: '+ IntToStr(i+1);
Mein Problem: Ich möchte kein Wochenende mitzählen!!
Mfg Norbert
Norbert Springer
  Mit Zitat antworten Zitat
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#2

Re: Werktage zählen

  Alt 9. Jul 2006, 13:40
Hey,

Mit datum := DayOfWeek(Edit1.Text) bekommst du den Wochentag raus.

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.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Werktage zählen

  Alt 9. Jul 2006, 13:46
Und vielleicht hiltf Dir dabei auch dies Feiertage anzeigen
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von norbert3
norbert3

Registriert seit: 24. Mai 2006
Ort: Sachsen
65 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Werktage zählen

  Alt 9. Jul 2006, 13:50
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
Norbert Springer
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Werktage zählen

  Alt 9. Jul 2006, 13:57
Zitat von norbert3:
Wie bekommt man das hin, dass die Tage automatisch eventl. in einer Schleife bis zum Enddatum durchlaufen und auf ihren Wert geprüft werden?
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Werktage zählen

  Alt 9. Jul 2006, 14:08
Hier noch etwas Code, der ohne brute force auskommt:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von norbert3
norbert3

Registriert seit: 24. Mai 2006
Ort: Sachsen
65 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Werktage zählen

  Alt 9. Jul 2006, 14:24
Hey,

erstmal danke für die schnellen Antworten.
@Jelly: wie gelingt es mir , die zwei Eingabefelder einzubinden?

mit einfach:
a := StrToDate(Edit1.Text); klappt es nicht.

Was mache ich falsch??

Norbert
Norbert Springer
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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