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)