| DOWsInRange Routines | 
Unit
QESBPCSDateTime
| Overloaded Variants | 
| Function DOWsInRange(const DOW: Byte; const StartDT, EndDT: TDateTime): Integer; | 
| Function DOWsInRange(const DOW: TESBDayofWeek; const StartDT, EndDT: TDateTime): Integer; | 
Declaration
Function DOWsInRange(const DOW: Byte; const StartDT, EndDT: TDateTime): Integer;
Description
If EndDT occurs before StartDT then they are swapped. Thanks to Tom Grieve for his assistance with this routine. Exception results for invalid DOW or invalid Month.
| Parameters | 
| DOW | Day of the Week, Sunday = 1 through Saturday = 7. Overloaded version also allows for TESBDayOfWeek type | 
| StartDT | The beginning Date | 
| EndDT | The end Date | 
Category
Date/Time Arithmetic RoutinesImplementation
 
| function DOWsInRange (const DOW: Byte; const StartDT, EndDT: TDateTime): Integer;
var
     DT1, DT2: TDateTime;
     StartDOW, Days, Weeks, Extras: Integer;
begin
     if (DOW < 1) or (DOW > 7) then
          raise EConvertError.Create (rsInvalidDOW);
     DT1 := StartDT;
     DT2 := EndDT;
     if DT2 < DT1 then
          SwapXY (DT1, DT2);
     Days := Trunc (DT2) - Trunc (DT1) + 1;
     Weeks := Days div 7;
     Extras := Days mod 7;
     StartDOW := DayOfWeek (DT1);
     if (Integer (DOW) - StartDOW + 7) mod 7 < Extras then
          Result := Weeks + 1
     else
          Result := Weeks;
End; | 
Declaration
Function DOWsInRange(const DOW: TESBDayofWeek; const StartDT, EndDT: TDateTime): Integer;Implementation
 
| function DOWsInRange (const DOW: TESBDayofWeek; const StartDT, EndDT: TDateTime): Integer; begin Result := DOWsInRange (Integer (DOW) + 1, StartDT, EndDT); End; | 
|  |