// 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;



Zugriffe seit 6.9.2001 auf Delphi-Ecke