Hi
Wenn du Delphi 6 verwendest, hast du doch die Funktion
WeekOfTheYear schon dabei. Ansonsten kannst du damit die Woche nach ISO berechnen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| function ISOWeekNumber(AYear, AMonth, ADay: Word; CMode: integer): integer; const dOffset : array[1..7] of Byte = (6, 7, 8, 9, 10, 4, 5); var Present, StartOfYear : TDateTime; FirstDayOfYear, WeekNumber, NumberOfDays, RYearOfWeekNumber: integer; begin Present := EncodeDate(AYear, AMonth, ADay); StartOfYear := ENcodeDate(AYear, 1, 1); FirstDayOfYear := dOffset[DayOfWeek(StartOfYear)]; NumberOfDays := Trunc(Present - StartOfYear) + FirstDayOfYear; WeekNumber := NumberOfDays div 7; if WeekNumber = 0 then Result := ISOWeekNumber(AYear - 1, 12, 31, CMode) else begin RYearOfWeekNumber := AYear; if WeekNUmber = 53 then begin if DayOfWeek( EncodeDate(AYear, 12, 31) ) < 5 then begin RYearOfWeekNumber := AYear + 1; WeekNumber := 1; end; end; if CMode = 1 then Result := WeekNumber else Result := RYearOfWeekNumber; end; end; |
Der Parameter CMode = 1 liefert die die Wochennummer des angegebenen Datums. CMode = 0 liefert das Jahr in das die Woche fällt (Nur sinnvoll bei der 1. Woche)
Datum des Montags der angegebenen Woche
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function ISOWeekDate(AWeek, AYear: integer): TDateTime; const dOffset : array[1..7] of Byte = (6, 7, 8, 9, 10, 4, 5); var StartOfYear : TDateTime; FirstDayOfYear : integer; begin StartOfYear := EncodeDate(AYear, 1, 1); FirstDayOfYear := dOffset[DayOfWeek(StartOfYear)]; Result := StartOfYear + (AWeek * 7) - FirstDayOfYear; end; |
Achtung: Die Funktion habe ich jetzt mehr oder weniger aus dem Stehgreif heraus geschrieben. Ist also nicht voll getestet
Gruss Lothar
Der BH ist für die Brust, der Plan ist für'n Ar...