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.