AGB  ·  Datenschutz  ·  Impressum  







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

Werktage Berechnung

Ein Thema von youuu · begonnen am 21. Apr 2011 · letzter Beitrag vom 21. Apr 2011
Antwort Antwort
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

Werktage Berechnung

  Alt 21. Apr 2011, 08:27
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)
Steven
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#2

AW: Werktage Berechnung

  Alt 21. Apr 2011, 08:31
Mal als Ansatz: klick
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: Werktage Berechnung

  Alt 21. Apr 2011, 08:34
- 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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (21. Apr 2011 um 08:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Werktage Berechnung

  Alt 21. Apr 2011, 09:12
Wie kann ich nun die Anzahl der Werktage berechnen?

Das Wäre in dem Beispiel: 15 Tage (Montag - Freitag)
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.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Werktage Berechnung

  Alt 21. Apr 2011, 09:36
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
Steven
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Werktage Berechnung

  Alt 21. Apr 2011, 09:40
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
(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).
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.

Geändert von Deep-Sea (21. Apr 2011 um 10:18 Uhr)
  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 20:53 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