Как узнать номер недели данного дня в году
Как узнать номер недели данного дня в году
Как узнать номер недели данного дня в году. Вариант 1: Function WeekOfYear(ADate: TDateTime): Word; Var Day: Word; Month: Word; Year: word; FirstOfYear: TDateTime; Begin DecodeDate(ADate,Year,Month,Day); FirstOfYear:=EncodeDate(Year,1,1); IF (ADate=EncodeDate(Year,12,31)) or (ADate=FirstOfYear) then Result:=1 else Result:=Trunc(ADate - FirstOfYear) div 7+1; End; Вариант 2: Function WeekNum(const ADate: TDateTime): word; Var Year: Word; Month: Word; Day: Word; Begin DecodeDate(ADate + 4 - DayOfWeek(ADate + 6),Year,Month,Day); Result:=1+Trunc((ADate-EncodeDate(Year,1,5) + DayOfWeek(EncodeDate(Year,1,3))) / 7); End; Вариант 3: Function MyWeekOfYear(Dat: TDateTime): Word; // Интерпретация номеров дней: // ISO: 1 = Понедельник, 7 = Воскресенье // Delphi SysUtils: 1 = Воскресенье, 7 = Суббота Var Day, Month, Year: Word; FirstDate: TDateTime; DateDiff: Integer; Begin Day:=SysUtils.DayOfWeek(Dat) - 1; Dat:=Dat + 3 -((6 + day) mod 7); DecodeDate(Dat,Year,Month,Day); FirstDate:=EncodeDate(Year,1,1); DateDiff:=Trunc(Dat - FirstDate); Result:=1 + (DateDiff div 7); End; Вариант 4: Function MyWeekOfYear2(Date: TDateTime): Word; { А можно просто воспользоваться стандартной функцией, если вашем Дельфи есть библиотека DateUtils.dcu. Не забудьте её подключить } Begin Result:=WeekOf(Date); End; А теперь проверка всех вариантов: procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(WeekOfYear(StrToDate('31.12.2003')))); ShowMessage(IntToStr(WeekNum(StrToDate('31.12.2003')))); ShowMessage(IntToStr(MyWeekOfYear(StrToDate('31.12.2003')))); ShowMessage(IntToStr(MyWeekOfYear2(StrToDate('31.12.2003')))); end;