AgeAtDateInMonths Function
Returns the Age (in months) of a "person" given their Date of Birth (DOB) and the Date of Reference (DT).

Unit
QESBPCSDateTime

Declaration
Function AgeAtDateInMonths(const DOB, DT: TDateTime): Integer;

Description
If DT occurs before DB then -1 is returned. Routine donated by David Gobbett.

Parameters
DOB Date of Birth.
DT Date in question.

Returns
Age in Integral Months at the Date in question.

Category
Date/Time Arithmetic Routines
Month Based Arithmetic Routines
Year Based Arithmetic Routines

Implementation

function AgeAtDateInMonths (const DOB, DT: TDateTime): Integer;
var
     D1, D2: Integer;
     M1, M2: Integer;
     Y1, Y2: Integer;
begin
     if DT < DOB then
          Result := -1
     else
     begin
          OptDecodeDateI (DOB, Y1, M1, D1);
          OptDecodeDateI (DT, Y2, M2, D2);
          if Y1 = Y2 then // Same Year
               Result := M2 - M1
          else // Different Years
          begin
               // 12 months per year age
               Result := 12 * AgeAtDate (DOB, DT);
               if M1 > M2 then
                    Result := Result + (12 - M1) + M2
               else if M1 < M2 then
                    Result := Result + M2 - M1
               else if D1 > D2 then // Same Month
                    Result := Result + 12;
          end;
          if D1 > D2 then // we have counted one month too many
               Dec (Result);
     end;
End;


HTML generated by Time2HELP
http://www.time2help.com