| Date2ISOWeekNo Routines | 
Unit
QESBPCSDateTime
| Overloaded Variants | 
| Procedure Date2ISOWeekNo(const DT: TDateTime; var WeekNo: Integer; var Year: Word); | 
| Procedure Date2ISOWeekNo(const DT: TDateTime; var WeekNo, Year: Integer); | 
Declaration
Procedure Date2ISOWeekNo(const DT: TDateTime; var WeekNo: Integer; var Year: Word);
Description
Weeks are assumed to start with Monday. The week that Jan 4 occurs in is the 1st week of the year. Note that this does mean that there can be 53 weeks in a year!
| Parameters | 
| DT | Date to process. | 
| WeekNo | Returns the ISO-8601 Week Number in specified Year | 
| Year | Returns 4 digit year to which the Week Number applies, not necessarily the same year as DT. | 
Category
Date/Time Arithmetic Routines
Week Based Arithmetic RoutinesImplementation
 
| procedure Date2ISOWeekNo (const DT: TDateTime; var WeekNo: Integer;
     var Year: Word);
var
     FirstMonday, StartYear: TDateTime;
     WeekOfs: Byte;
begin
     Year := Date2Year (DT);
     StartYear := GetFirstDayOfYear (Year) + 3; // Jan 4th
     if ISODayOfWeek (StartYear) <= 4 then
     begin
          FirstMonday := StartOfISOWeek (StartYear);
          WeekOfs := 1;
          if DT < FirstMonday then
          begin
               Dec (Year);
               WeekNo := ISOWeeksInYear (Year);
               Exit;
          end;
     end
     else
     begin
          FirstMonday := StartOfISOWeek (StartYear) + 7;
          WeekOfs := 2;
          if DT < FirstMonday then
          begin
               WeekNo := 1;
               Exit;
          end;
     end;
     WeekNo := DaysApart (FirstMonday, StartofISOWeek (DT)) div 7 + WeekOfs;
     if WeekNo > ISOWeeksInYear (Year) then
     begin
          WeekNo := 1;
          Inc (Year);
     end;
End; | 
Declaration
Procedure Date2ISOWeekNo(const DT: TDateTime; var WeekNo, Year: Integer);Implementation
 
| procedure Date2ISOWeekNo (const DT: TDateTime; var WeekNo, Year: Integer);
var
     FirstMonday, StartYear: TDateTime;
     WeekOfs: Integer;
begin
     Year := OptDate2Year (DT);
     StartYear := GetFirstDayOfYear (Year) + 3; // Jan 4th
     if ISODayOfWeek (StartYear) <= 4 then
     begin
          FirstMonday := StartOfISOWeek (StartYear);
          WeekOfs := 1;
          if DT < FirstMonday then
          begin
               Dec (Year);
               WeekNo := ISOWeeksInYear (Year);
               Exit;
          end;
     end
     else
     begin
          FirstMonday := StartOfISOWeek (StartYear) + 7;
          WeekOfs := 2;
          if DT < FirstMonday then
          begin
               WeekNo := 1;
               Exit;
          end;
     end;
     WeekNo := DaysApart (FirstMonday, StartofISOWeek (DT)) div 7 + WeekOfs;
     if WeekNo > ISOWeeksInYear (Year) then
     begin
          WeekNo := 1;
          Inc (Year);
     end;
End; | 
|  |