Weighing in a little late here (I get the digest version, so there's some lag time)... Here's what I use in a patient notes stack in my practice. I tried using routines based on seconds but always ran into errors when the today was close to the birthday. The leap year thing is a bear to get exactly right. I finally went to something that looks at the dates:

function doAge bd,asOf
  if bd = "" then
    return ""
  end if
  set the itemDelimiter to "/"
  put the last item of bd into yr
  if the number of chars of yr = 2 then
    if last item of bd >= last item of the short date then
      put "19" before item 3 of bd
    else
      put "20" before item 3 of bd
    end if
    put item 3 of bd into actualBdYr
  else
    put yr into actualBdYr
  end if
  if asOf = "" then
      put the short date into asOf
  end if
  put the last item of asOf into yr
  if the number of chars of yr = 2 then
    if last item of asOf > last item of the short date then
      put "19" before item 3 of asOf
    else
      put "20" before item 3 of asOf
    end if
    put item 3 of asOf into actualNowYr
  else
    put yr into actualNowYr
  end if
  set the itemDelimiter to ","
  convert bd to dateItems
  put actualBdYr into item 1 of bd
  convert asOf to dateItems
  put actualNowYr into item 1 of asOf
  put item 1 of bd into bYr
  put item 2 of bd into bMo
  put item 3 of bd into bDy
  put item 1 of asOf into nYr
  put item 2 of asOf into nMo
  put item 3 of asOf into nDy
  if bDy > nDy then subtract 1 from nM
  if bMo > nMo then subtract 1 from nY
  put nYr - bYr into age
  return age
end doAge

************************

On Fri, 8 Sep 2006 14:44:38 +0100 Mark Smith <[EMAIL PROTECTED]> wrote:

****
Re: Age calculation script

replacing
put 60 * 60 * 24 * 365 into secsPerYear

with
  put (60 * 60 * 24 * 365) + (60 * 60 * 6)  into secsPerYear

ie. adding a quarter of a days seconds to sescPerYear


seems to fix it, at least for age < 30ish.

Best,

Mark

On 8 Sep 2006, at 14:36, Mark Smith wrote:

********
 Actually, the other way it is likely to be wrong is when today's
date is very close to the persons birthday - eg if a persons age is
really 16 yrs 11 months, and their birthday is a couple of days
from now, it may give 17 yrs 0 months.
********
****
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to