Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#6

Re: Verbesserte Version von YearsBetween, MonthsBetween

  Alt 27. Okt 2009, 16:54
direkt ausgerechnet, ohne Annäherung über 'ne Schleife

Delphi-Quellcode:
Procedure CheckedSwap(Var ANow, AThen: TDateTime); Inline;
  Var Temp: TDateTime;

  Begin
    If ANow <= AThen Then Exit;
    Temp := ANow;
    ANow := AThen;
    AThen := Temp;
  End;

Function YearsBetween(ANow, AThen: TDateTime): Integer;
  Var Yn, Yt, Mn, Mt, Dn, Dt: Word;

  Begin
    CheckedSwap(ANow, AThen);
    DecodeDate(ANow, Yn, Mn, Dn);
    DecodeDate(AThen, Yt, Mt, Dt);
    Result := Yt - Yn;
    If (Mt < Mn) or ((Mt = Mn) and ((Dt < Dn))) Then Dec(Result);
  End;

Function MonthsBetween(ANow, AThen: TDateTime): Integer;
  Var Yn, Yt, Mn, Mt, Dn, Dt: Word;

  Begin
    CheckedSwap(ANow, AThen);
    DecodeDate(ANow, Yn, Mn, Dn);
    DecodeDate(AThen, Yt, Mt, Dt);
    Result := (Yt - Yn) * 12 + (Mt - Mn);
    If Dt < Dn Then Dec(Result);
  End;
Es wird abgerundet und sozusagen immer der Tagesbeginn gewertet.
Also Anfang=01.01. und Ende=31.12. ist noch kein ganzes Jahr
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat