Как узнать номер недели данного дня в году.
Компилятор: Delphi
Вариант 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;
|