Age & Anniversary Calculations
Ken Corey
ken at kencorey.com
Mon May 21 04:50:57 EDT 2012
On 21/05/2012 08:02, Igor de Oliveira Couto wrote:
> What is the 'best' way to perform these 2 calculations with LiveCode?
'convert' just rocks. Here's a couple of throwaways to show you how I'd
approach it. They probably aren't exactly what you need, but you'll get
the idea.
> 1) Calculate a person's age, given a birthdate:
This one is a pain, as I ran it on Windows, and birthdays before 1970
weren't natively handled. I think this does the trick.
-------------------
on mouseUp
-- put the birthday into tBd,
-- on windows, can't do before 1970!
put "May 21 1965" into tBd
-- handle < 1970 (is this just on windows?)
set the itemdel to " "
put item 3 of tBd into tBYear
if tBYear < 12 then
add 2000 to tBYear
else if tBYear < 100 then
add 1900 to tBYear
end if
put 0 into tBYearOffset
if tBYear < 1970 then
put 1970 - tBYear into tBYearOffset
put 1970 into item 3 of tBd
end if
-- back to out regularly scheduled code
set the itemdel to ","
convert tBd to dateItems
if the result is not empty then
put "Got an error:"&the result
else
put the long time into tNow
convert tNow to dateItems
subtract tBYearOffset from item 1 of tBd
put item 1 of tNow - item 1 of tBd into tBirthdays
answer "You've had "&tBirthdays&" birthdays."
end if
end mouseUp
-------------------
> 2) Calculate whether an *anniversary* falls within a time frame - ie., within a week, within 2 weeks, within a month of today:
Something like this perhaps (written as in a button script)...watch out
for wrapping:
-------------------
on mouseUp
-- get now as 2012,5,21,9,12,20,2 - today's date/time/day number
put the long time into tNow
convert tNow to dateItems
-- find out this year's anniversary, replace '7' and '8' as needed
put tNow into tAnniv
put 6 into item 2 of tAnniv
put 8 into item 3 of tAnniv
-- find out distance between...
convert tNow to seconds
convert tAnniv to seconds
put tAnniv - tNow into tDiff
if tDiff < 0 then
answer "Already passed!"
else
convert tDiff to dateItems
answer "it's in "&item 2 of tDiff&" months, "&item 3 of tDiff \
&" days, "&item 4 of tDiff&" hours."
end if
-- difference is shown as - 1970,2,18,0,0,0,4
-- Ignore the year, as we purposely
end mouseUp
-------------------
Hope this helps.
-Ken
More information about the use-livecode
mailing list