It still works, probably because dayOfMonth is not what you expected at first glance.
For a date, you have 3 accessors, and i think you were expecting #dayNumber (January third, 1990) day. "Wednesday". (January third, 1990) dayOfMonth. "January 3" (January third, 1990) dayNumber. "3" On 27 July 2017 at 16:43, PBKResearch <pe...@pbkresearch.co.uk> wrote: > Julián > > > > I don’t know Chalten, but I wonder whether your definition of > Person>>ageOn: will work correctly. Could I suggest you add two extra > assertions to your test: > > > > assert: (john ageOn: February fifteenth , 2013) equals: (TimeUnits year > with: 49); > assert: (john ageOn: April first , 2013) equals: (TimeUnits year with: 50); > > > > Clearly these should be true, but I think they will not be – unless > Date>>dayOfMonth works in a very counter-intuitive way. > > > > HTH > > > > Peter Kenny > > > > > > *From:* Pharo-users [mailto:pharo-users-boun...@lists.pharo.org] *On > Behalf Of *Julián Maestri > *Sent:* 27 July 2017 18:58 > *To:* Any question about pharo is welcome <pharo-users@lists.pharo.org> > *Subject:* Re: [Pharo-users] How to calculate someone's age elegantly? > Does Duration work? > > > > 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- > calculate-someone-s-age-elegantly-Does-Duration-work- > tp4955990p4956114.html > > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. > > > > >