Automated age calculation

You can typeset your age easily using the datetime package and doing some simple calculations.

\documentclass{article}
\usepackage{datenumber,fp}
\begin{document}
\newcounter{dateone}%
\newcounter{datetwo}%

\setmydatenumber{dateone}{1990}{01}{01}%
\setmydatenumber{datetwo}{\the\year}{\the\month}{\the\day}%
\FPsub\result{\thedatetwo}{\thedateone}
\FPdiv\myage{\result}{365.2425}
\myage

\end{document}

You can truncate the figure correctly, i.e., if you 21.6 years old it will give you 21 (see edit), by changing the last line of the code as follows:

\FPround\myage{\myage}{0}\myage\ years old

See also this post.

Edit

Since the rounding of the age elicited a few comments I looked up the legal definition of age (which was probably appropriate in my example). Based on this I have changed the code from FPround to FPtrunc. Thanks to all that made comments. I also changed the days in the year to 365.2425 to increase the accuracy a bit for marginal cases!


The proposed solution does not seem to be completely accurate ; a perhaps more straightforward way of doing this is (replace DDMMYYYY by actual figures)

\usepackage{ifthen}
\newcounter{myage}
\setcounter{myage}{\the\year}
\addtocounter{myage}{-YYYY}
\ifthenelse{\the\month<MM}{\addtocounter{myage}{-1}}{}
\ifthenelse{\the\month=MM}{
  \ifthenelse{\the\day < DD}{\addtocounter{myage}{-1}}{}
}{}

then \themyage{} can be used to show your age.


I have found that this works very nicely.

%
\catcode`@=11
\newcount\@tempnuma
\def\@null{null}
\def\age#1{\@age#1\@null}
\def\@age#1/#2/#3\@null{%
        \@tempnuma\year
        \advance\@tempnuma by -1900 % Comment this line out for dates of
                                    % the form 2/24/1967 - last 2 digits of yr.
        \advance\@tempnuma by -#3\relax  % gives # of years 
        %\number\@tempnuma
    \ifnum#1 > \month   %anniv month is later in year
            \advance\@tempnuma by -1\relax
    \else
            \ifnum#1 = \month   %anniv month is this month
                \ifnum#2 > \day %anniv day is later in month
                    \advance\@tempnuma by -1\relax
                \fi\relax
            \fi\relax
    \fi\relax
\number\@tempnuma}
\catcode`@=12
%

Usage is: \age{6/25/84} yields the correct age in years, which is what one usually wants. With some twiddling, one could get the months and days.