// Die deutsche Kalenderwoche berechnet sich nach DIN 1355:
// Der 1. Januar eines Jahres gehört erst dann zur ersten Kalenderwoche,
// wenn dieser Tag auf einen Montag bis Donnerstag fällt. Falls der 1.Januar
// auf Freitag bis Sonntag fällt, zählt er und evtl. auch der 2. u. 3. Januar
// noch zur letzten Kalenderwoche des vorherigen Jahres.
// Weiterhin können der 29.12., 30.12. und 31.12. eines Jahres schon zur
// ersten Kalenderwoche des neuen Jahres gehören, und zwar dann, wenn der
// 31.12. auf einen Montag, Dienstag oder Mittwoch fällt.
// Der Montag ist der erste Tag der Woche. Der 4. Januar gehört immer zur
// ersten Kalenderwoche. Der 28. Dezember gehört immer zur letzten
// Kalenderwoche. Eine Woche gehört zu dem Kalenderjahr, in dem 3 oder mehr
// Tage der Woche liegen. Der Donnerstag einer Woche liegt immer in dem
// Kalenderjahr, dem die Woche zugerechnet wird.
// Getestet mit D4 unter Win98
// Variante 1 --------------- (unter Verwendung von DayOfWeek)
function Kalenderwoche(Datum: TDate): byte;
var
Jahr, Monat, Tag: Word;
Erster: TDate;
begin
DecodeDate(Datum + ((8 - DayOfWeek(Datum)) mod 7) - 3, Jahr, Monat, Tag);
Erster := EncodeDate(Jahr, 1, 1);
Result := Trunc(Datum - Erster - 3 + (DayOfWeek(Erster) + 1) mod 7) div 7 + 1;
end;
// Beispielaufruf
procedure TForm1.Button4Click(Sender: TObject);
var d: TDate;
begin
d := strtodate('1.1.2005');
showmessage(Inttostr(Kalenderwoche(d)));
end;
// Variante 2 --------------- (aus Excel-Tip umgestrickt)
function KW(Datum: TDate): byte;
var
Jahr, Monat, Tag: Word;
Rest: Integer;
begin
Rest := Trunc(Datum - 2) mod 7;
DecodeDate(Datum - Rest + 3, Jahr, Monat, Tag);
Result := Trunc((Datum - (EncodeDate(Jahr, 1, 1) + Rest - 10)) / 7);
end;
// Beispielaufruf
procedure TForm1.Button15Click(Sender: TObject);
begin
showmessage(IntToStr(KW(strtodate('1.1.2005'))));
end;