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;
Các BusinessDaysSinceFixedDate thói quen tính toán số ngày làm việc kể từ khi một ngày cố định. Ngày cụ thể, không liên quan, là Thứ Hai, 25 Tháng Mười Hai, 1899. Đơn giản chỉ đếm số tuần đã trôi qua (X div 7) và nhân số đó với 5. Sau đó, nó sẽ thêm một khoản bù vào đúng dựa vào ngày trong tuần. Lưu ý rằng (X mod 7) sẽ trả lại giá trị âm cho một ngày phủ định, nghĩa là ngày trước ngày 30 tháng 12 năm 1899.
BusinessDaysBetweenDates chỉ đơn giản gọi BusinessDaysSinceFixedNgày cho ngày bắt đầu và ngày kết thúc và trừ một từ ngày khác.
Nguồn
2013-02-13 16:43:42
Tôi thấy cảm ơn ... Tôi không cần ngày nghỉ vì chúng sẽ không ảnh hưởng đến thời gian quay vòng đáng kể ... nhưng cuối tuần là vấn đề. Tôi sẽ cho nó một shot. – Sardukar
Tôi đã sử dụng gần như cùng một chức năng..hoạt động tuyệt vời. có cách quá có thể mẫu vì vậy nếu ít có vấn đề với ngày lễ họ sẽ không ảnh hưởng đến tổng thể .. cảm ơn bạn. – Sardukar
Sẽ tốt hơn nếu làm điều này mà không cần lặp lại. –