Ich hab mal eine (relativ) genaue Funktion geschrieben, die auch auf die verschiedenen Monate achtet. Schaltjahre werden zwar nicht berücksichtigt, aber... schauts euch mal an:
Delphi-Quellcode:
function GetMonths(aDate: TDate): integer;
var
years, months, days: word;
begin
DecodeDate(aDate, years, months, days);
case months of
1: Months := Months + days div 31;
2: Months := Months + days div 28;
3: Months := Months + days div 31;
4: Months := Months + days div 30;
5: Months := Months + days div 31;
6: Months := Months + days div 30;
7: Months := Months + days div 31;
8: Months := Months + days div 31;
9: Months := Months + days div 30;
10: Months := Months + days div 31;
11: Months := Months + days div 30;
12: Months := Months + days div 31;
end;
Months := Months + years * 12;
result := Months;
end;
Damit kann man jetzt EIN Datum in Monate aufspalten. Mit einem zweiten Aufruf dieser Funktion kann man auch die Differenz ausrechnen.
Hoffe, ich konnte dir helfen!
Mfg malo
//edit: nicht auf funktionalität geprüft!
//edit2: Und nochmal die Funktion, aber etwas genauer (mit Nachkommastellen):
Delphi-Quellcode:
function GetMonths(aDate: TDate): extended;
var
years, months, days: extended;
begin
DecodeDate(aDate, years, months, days);
case months of
1: Months := Months + days / 31;
2: Months := Months + days / 28;
3: Months := Months + days / 31;
4: Months := Months + days / 30;
5: Months := Months + days / 31;
6: Months := Months + days / 30;
7: Months := Months + days / 31;
8: Months := Months + days / 31;
9: Months := Months + days / 30;
10: Months := Months + days / 31;
11: Months := Months + days / 30;
12: Months := Months + days / 31;
end;
Months := Months + years * 12;
result := Months;
end;
Wieder ungetestet, sollte aber funktionieren.