Using https://github.com/ba-st/Chalten the solution was something like this:
Person>>ageOn: aDate > | difference | > difference := (aDate year distanceFrom: self dateOfBirth year). > ^(aDate dayOfMonth < self dateOfBirth dayOfMonth) > ifTrue: [difference - TimeUnits year unitaryMeasurement] > ifFalse: [difference] Test for that > testAge > | john | > john := Person namedFirst: 'John' last: 'Doe' born: March fourteenth , > 1963. > self > assert: (john ageOn: March thirteenth , 2013) equals: (TimeUnits year > with: 49); > assert: (john ageOn: March fourteenth , 2013) equals: (TimeUnits year > with: 50); > assert: (john ageOn: March fifteenth , 2013) equals: (TimeUnits year with: > 50) On 21 July 2017 at 14:25, Tim Mackinnon <tim@testit.works> wrote: > Paul - this is very helpful, gosh you learn a lot from what seemed like > simple question. > > Your suggestion along with Subbu’s gives an easy workable solution - I > also wonder if the method should be in the image along with the comment > explaining half open intervals like you have. Do you think there is another > name for that end method - displayEnd sounds like it actively displays - I > wonder if boundedEnd or completeEnd or finiteEnd might be correct > alternatives (or is displayEnd a decent convention that everyone > understands?) > > I really have to learn how to submit pull requests (although it seems > rather complicated at the moment while the full git integration process is > being sorted out). > > Thanks everyone > > Tim > > > On 21 Jul 2017, at 16:40, Paul DeBruicker <pdebr...@gmail.com> wrote: > > > > Tim Mackinnon wrote > >> I am also wondering if the issue with Timespan is concerning - I was > >> surprised that putting a start and end date left me something that > didn’t > >> answer my end date presumably down to rounding when it’s converted down > to > >> a duration (making me wonder if its better to keep a start and end date > >> and calculate the duration on the fly). > >> > >> Tim > > > > > > The Timespans are half open intervals. > > (https://en.wikipedia.org/wiki/Interval_(mathematics)) > > > > Friday July 21st ends at 11:59:59.99999999999... etc etc etc ...9999PM > and > > the 22nd starts at 12:00AM > > > > > > If Timespans were closed intervals like you expect then we'd be out of > whack > > with our corner of the universe. That extra clock tick adds complexity. > > > > But I add a method to my image called #displayEnd because I also want > them > > to print 3PM-4PM and not 3PM-3:59:59.999999999PM and use that in my print > > statements and rendering for Seaside. > > > > displayEnd > > ^ start + duration > > > > > > > > > > > > > > > > > > -- > > View this message in context: http://forum.world.st/How-to-c > alculate-someone-s-age-elegantly-Does-Duration-work-tp4955990p4956114.html > > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. > > > > >