Как узнать номер недели данного дня в году?
Как узнать номер недели данного дня в году?
Вариант 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);
Result := Trunc(ADate - FirstOfYear) div 7 + 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(WeekOfYear(Date)));
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 WeekOfYear(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;
Взято с Исходников.ru