Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#16

AW: Kalenderwoche ermitteln

  Alt 31. Mai 2013, 07:45
Ich habe mal (vor 20 Jahren oder so: Grauenvolle Nomenklatur) diesen Code produziert. Bisher hat sich auch noch niemand beschwert, und etwas einfacher und verständlicher als der Code vom Mathematiker ist er auch. Vielleicht stimmt die Berechnugn für das Jahr 6592 nicht, aber mir ist das wurscht.

Delphi-Quellcode:
Function CsGetWeek(_Date: TDateTime): Word;
// Zunächst wird die KW des 1.1 des Jahres ermittelt.
// Sind in der ersten KW des Jahres mehr als vier Tage,
// dann ist dies die KW 1, sonst die KW '0' bzw.
// die KW des 31.12. des vorherigen Jahres.
Var
  MondayOfKW1,
    FirstOfJanuary: TDateTime;
  Dow, KW, y, m, d: Word;

Begin
  DecodeDate(_Date, y, m, d);
  FirstOfJanuary := EncodeDate(Y, 1, 1);
  Dow := SysUtils.DayOfWeek(FirstOfJanuary);
  If Dow <= 5 Then
    MondayOfKW1 := FirstOfJanuary - Dow + 1
  Else
    MondayOfKW1 := FirstOfJanuary + 8 - Dow;

  KW := Trunc(_Date - MondayOfKW1) Div 7 + 1;
  If KW < 1 Then
    KW := CsGetWeek(EncodeDate(Y - 1, 12, 31))
  Else If KW = 53 Then
    If SysUtils.DayOfWeek(EncodeDate(Y + 1, 1, 1)) <= 4 Then KW := 1;
  Result := KW;
End;
  Mit Zitat antworten Zitat