Einzelnen Beitrag anzeigen

Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#19

Re: Monate berechnen zwischen zwei datums

  Alt 30. Apr 2005, 07:09
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.
  Mit Zitat antworten Zitat