First of the month following hiredate + 3 month rather would be
dFourMonthsLater = GOMONTH(dHired, 4)
dEligible = m.dFourMonthsLater - DAY(m.dFourMonthsLater) + 1
You just need to keep three things in mind in regard to calendar calculations:
1. there is a gomonth() function you can use to compute the corresponding date shifted whole months, this includes shifting the 31st of one month to a 30t of another, as this is taken as the last day, so gomonth doesn't simply add 30 or so days for each month, it's intelligent, don't try to reinvent this.
Of course one thing follows gomont(date,12*n) is a way to implement goyear(), which you might think to rather do via date(year()+1,month(), day()), but which will not work for the exception of 29th of february.
2. If you add a nummber to a date, this menas adding days, unfortunately you can only add whole days, but...
3. ...if you add a number to a dateTIME, this adds seconds.
---
So all in all you can make calculations on dates and datetimes down to seconds precision - it will also be easy enough to go down to split seconds with an additional variable or field of course, but that need is rather seldom. The point is, you never have to struggle with extracting parts of the date, computing with them, handling carry over in the non decimal time system and then reconvert to date/time, you can stay with the type and compute within it.
Bye, Olaf.