John Machin wrote: > thebjorn wrote: [...] > > > > def age(born): > > now = date.today() > > birthday = date(now.year, born.month, born.day) > > Bad luck if the punter was born on 29 Feb and the current year is not a > leap year.
Good catch! Thanks! [..] > Holy code bloat, Batman! Try this: > > return now.year - born.year - (birthday > now) yuck :-) [...] > It's the irregular-size months that cause the problems. If you can work > out the months difference, then just floor_div by 12 to get the years > difference. I don't agree that the irregular sized months cause a problem in this case. They do cause a problem if you're asking "when is today + one month?", i.e. there isn't an unambiguous answer to that question in general (e.g. if today was January 31). We're asking a different kind of question though: "has it been at least one month since January 31?", the answer would be no on Feb 29 and yes on Mar 1. > Below is some code from the ancient times when everybody and his dog > each had their own date class :-) [...] Wow. I'm speechless. (any reason you didn't want to use the calendar module?) -- bjorn -- http://mail.python.org/mailman/listinfo/python-list