Was ist denn, wenn ich mehr als 1 Jahr zwischen den beiden Datumsen habe?
Also ich würde das dann so machen (ungetestet):
Delphi-Quellcode:
Function IstEinSchaltjahr(jahr : Integer) : Bool;
begin
if jahr mod 400 = 0 then Result := 1
else if jahr mod 100 = 0 then Result := 0
else if jahr mod 4 = 0 then Result := 1
else Result := 0;
end;
Function TageImMonat (Monat, Jahr : Integer) : Integer;
Begin
Case Monat of
1,3,5,7,8,10,12 : Result := 31;
4,6,8,10 : Result := 30;
2 : If IstEinSchaltHahr(Jahr) then
Result := 29
else
Result := 28;
end
end;
Function AnzahlTage (A,B : TDatum) : Integer;
Begin
If (A.Jahr=B.Jahr) and (A.Monat=B.Monat) then
result := B.Tag - A.Tag;
exit;
end;
L := A;
// 1. Alle Tage bis zum Monatsende...
Result := TageImMonat(L.Monat, L.Jahr) - A.Tage;
// 2. Dann alle Monate bis zum Ferienbeginn zusammenzählen
While (L.Jahr<>B.Jahr) and (L.Monat <> B.Monat) Do Begin
if L.Monat=12 then begin
L.Jahr := L.Jahr +1 ;
L.Monat := 1;
end
else L.Monat := L.Monat + 1;
Result := Result + TageImMonat(L.Monat, L.Jahr);
end;
// 3. Zum Schluss noch die Tage vom Ferienmonat
Result := Result + B.Tage;
End;