Age calculation script

Jim Ault JimAultWins at yahoo.com
Sat Sep 9 13:36:44 EDT 2006


On 9/9/06 10:21 AM, "Roger.E.Eller at sealedair.com"
<Roger.E.Eller at sealedair.com> wrote:

> On 9/9/06 12:03 PM, "Jim Ault" <JimAultWins at yahoo.com> wrote:
>> Here is my version using the approach of 'dateitems'
>> This rendition *should* do things correctly and accommodate leap years.
>> It will also calculate days till next birthday.
> 
> It appears that any birth year before 1970 results in an incorrect
> calculation.  Entering 5/18/65, the result is:  days old = 54750   years old =
> 149   exact years old = 149.945205   next
> Bday = 20 days from now
> 
Hmmmm, my version seems to work fine.  Maybe I did a typo or something in
building the message to the list.
--------------- using quotes around the date
calcbackdate "5/18/65"
days old = 15089   years old = 41
exact years old = 41.312329   next Bday = 251 days from now

------------------- using quotes & a leading space
calcbackdate " 5/18/65"
days old = 114   years old = 0
exact years old = 0.312329   next Bday = 251 days from now


------------------- using NO quotes
calcbackdate 5/18/65
days old = 13401   years old = 36
exact years old = 36.690411   next Bday = 113 days from now

----------------------------------------------------------------------------
here is the fresh version of the script I am using.
See if it makes a difference
 
--start copy here
on calcbackdate  birthdate
   put word 1 of birthdate into birthdate
  if birthdate contains "2/29" then
    replace "2/29" with "2/28" in birthdate
    put true into leapBirthday --if you need this
  end if
  convert birthdate to dateitems
  put item 1 to 3 of birthdate into birthdate
  put the short date into noww
  convert noww to seconds
  put 24*60*60 into hr24
  repeat with x = 1 to 36500 --99+ years
    put noww - (x*hr24) into past
    convert past to dateitems
    if past contains ",2,29," then add 1 to leapDays
    if past contains birthdate then exit repeat --we are done
  end repeat
  put (x - leapDays)/365 into ageInYearsDecimal
  put (x - leapDays) div 365 into ageInYears
  put x into ageInDays
  put ((ageInYears+1) -ageInYearsDecimal)*365 into daysTillNext
  --did not test for upcoming leap year
  put "days old = " & ageInDays && "  years old = "& ageInYears&cr \
      & "exact years old = "& ageInYearsDecimal&& "  next Bday = "&
daysTillNext \
      & " days from now"
end calcbackdate

--end copy



Jim Ault
Las Vegas
















More information about the use-livecode mailing list