Это относится к крайним случаям месяца (т.е. 15 марта 2009 г. - 12 января 2010 г.)
def months_between( d1, d2)
d1, d2 = d2, d1 if d1 > d2
y, m, d = (d2.year - d1.year), (d2.month - d1.month), (d2.day - d1.day)
m=m-1 if d < 0
y, m = (y-1), (m+12) if m < 0
y*12 + m
end