Here lies the one that works, not the old one I posted ages ago. It also uses dates instead of timestamp differences and should therefore not break if you ask it to go before the Epoch (some time in 1970 I think):
Adrie’s comment left on my old blog pointed this out (he’s much cleverer than me!) – it’s really trivial:
s is the start date and e is the end date (s is lower than e)
(e.month - s.month) + 12 * (e.year - s.year)
See!
module DateUtilsclass << self def months_between(date1 = Time.now,date2 = Time.now)date1 ||= Time.now date2 ||= Time.nowif date1 < date2recent_date = date1.to_date past_date = date2.to_dateelserecent_date = date2.to_date past_date = date1.to_dateend(past_date.month - recent_date.month) + 12 * (recent_date.year - past_date.year)endendend
Imported Comments:
UE
Thanks a lot. helped me much
john
not working
fdsa
doesnt this neglect the actual day of the month? there isn’t 1 month between 2/1/11 and 1/31/11, but this would claim there is…
Francis
ok – but “months or part therof” is a long method name 🙂