| 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; |
|
|