Wie kann ich aus einem Datum die Wochennummer berechnen?


Diese Routinen von Peter Haas demonstrieren die Berechnung der Wochennummer aus einem Datum, sowie die Ermittlung des Datums des ersten Tages einer Woche:

var 
  FirstWeekDay  : Integer = 2;{ Wochentag, mit dem die Woche beginnt
                                  (siehe Delphi-Wochentage)
                                  2 : Montag (nach DIN 1355) }

  FirstWeekDate : Integer = 4;  { 1 : Beginnt am ersten Januar
                                  4 : Erste-4 Tage-Woche (nach DIN 1355)
                                  7 : Erste volle Woche }

liefert das Datum des ersten Tages der Woche:

function WeekToDate(AWeek,AYear:Integer) : TDateTime;
begin
  Result := EncodeDate(AYear,1,FirstWeekDate);
  Result := Result+(AWeek-1)*7-((DayOfWeek(Result)+(7-FirstWeekDay)) mod 7);
end;

liefert die Wochennummer und das Jahr, zu dem die Woche gehört:

procedure DateToWeek(ADate:TDateTime; var AWeek,AYear:Word);
var Month,Day : Word;
begin
  ADate := ADate-((DayOfWeek(ADate)-FirstWeekDay+7) mod 7)+ 7-FirstWeekDate;
  DecodeDate(ADate,AYear,Month,Day);
  AWeek := (Trunc(ADate-EncodeDate(AYear,1,1)) div 7)+1;
end;

Bemerkungen zur Berechnung der Wochennummer nach DIN 1355:

aus diesen Definitionen folgt:

Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie kann ich in meinem Programm ein vierstelliges Jahresdatum anzeigen?
Allgemeine Tips zum Arbeiten mit Datumswerten (TDateTime)


Delphi FAQ