Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mo 24.02.03 16:54 
Hi,

es gab mal irgendwo (!) die Funktionen DatetoWeek und WeektoDate - waren jeweils nur wenige (wenn überhaupt nur eine) Zeilen lang. Könnte mir das jemand posten? Ich verzweifle nach hoffnungsloser Suche :bawling:

AXMD
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Di 25.02.03 09:38 
Hi
Wenn du Delphi 6 verwendest, hast du doch die Funktion WeekOfTheYear schon dabei. Ansonsten kannst du damit die Woche nach ISO berechnen:
ausblenden 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
ausblenden 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...
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Mi 26.02.03 08:49 
Hi,

danke erst mal. Habe leider heute keine Zeit mehr, die Funktion zu testen, aber vielleicht morgen.
Vielen Dank,
AXMD