function BusinessDaysSinceFixedDate (const nDate : tDateTime) : integer;
const
Map : array [ -6 .. 6 ] of integer
= ( 0, 0, 1, 2, 3, 4, 5, 5, 5, 6, 7, 8, 9);
var
X : integer;
begin
X := trunc (nDate);
Result := 5 * (X div 7) + Map [ X mod 7 ];
end;
function BusinessDaysBetweenDates (const nStartDate : tDateTime;
const nEndDate : tDateTime) : integer;
begin
Result := BusinessDaysSinceFixedDate (nEndDate)
- BusinessDaysSinceFixedDate (nStartDate);
end;
Die Routine BusinessDaysSinceFixedDate berechnet die Anzahl der Arbeitstage seit einem bestimmten Datum. Das bestimmte Datum, das irrelevant ist, ist Montag, 25. Dezember 1899. Es zählt einfach die Anzahl der Wochen, die vergangen sind (X div 7) und multipliziert diese mit 5. Dann fügt es einen Offset hinzu, um basierend auf dem Tag zu korrigieren der Woche. beachten, daß (X mod 7) einen negativen Wert für ein negatives Datum zurück, das heißt ein Zeitpunkt vor dem 30. Dezember, 1899.
Die Routine BusinessDaysBetweenDates einfach BusinessDaysSinceFixedDate für das Start- und Enddatum aufruft und subtrahiert eine von dem anderen.
Ich sehe danke ... Ich brauche keine Ferien, da sie die Turnaround-Zeiten nicht signifikant beeinflussen werden..aber Wochenenden sind ein Problem. Ich werde es versuchen. – Sardukar
Ich habe fast die gleiche Funktion verwendet .. funktioniert großartig. Es gibt viel zu viele Proben, wenn sie nur wenige Probleme mit den Ferien haben, werden sie nicht die gesamte ... thank you. – Sardukar
Es wäre schön, dies ohne eine Schleife zu tun. –