Zitat von
Daniel G:
Dann sollte der Nachkommateil vielleicht lieber weggefiltert werden. :gruebel: Statt
Round also
Trunc
Nein, das bringt nichts.
Hagens Routine arbeitet fehlerfrei, solange der TDateTime Wert ganzzahlig ist.
Wenn der TDateTime-Wert einen Zeitanteil hat, bringt sie an bestimmten Tagen dann fehlerhafte Resultate, wenn der Zeitanteil >= 12 Stunden ist.
Also sollte am Anfang der Routine eine Zeile
A := Int(A);
eingefügt werden.
Vielleicht sollte man die letzte Zeile ändern
von
Result := Round(((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7);
in
Result := Trunc(0.5+((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7);
weil das besser zeigt, was gerechnet werden soll.
M.E. sollte die Routine dann so aussehen:
Delphi-Quellcode:
function DayOfWeekGerman(ADate: TDateTime): Integer;
begin
Result := DayOfWeek(ADate) -1;
if Result <= 0 then Result := 7;
end;
function WeekOfDate(A: TDateTime): Integer;
var
Day: Integer;
Y,M,D: Word;
n:extended;
begin
A := Int(A);
Day := DayOfWeekGerman(A);
DecodeDate(A +4 -Day, Y, M, D);
Result := Trunc(0.5+((A +8 -Day) - EncodeDate(Y, 1, 1)) / 7);
end;