获取在Ruby中传递的月数

问题描述:

是否有一种简单的方法可以获取在ruby中的两个日期之间传递的月数(多年)?获取在Ruby中传递的月数

我发现这个解决方案,它似乎是合乎逻辑和似乎工作。

startdate = Time.local(2001,2,28,0,0) 
enddate = Time.local(2003,3,30,0,0) 
months = (enddate.month - startdate.month) + 12 * (enddate.year - startdate.year) 

参考:http://blog.mindtonic.net/calculating-the-number-of-months-between-two-dates-in-ruby/

+0

看起来不错,谢谢你们。 – dhulihan 2010-04-02 22:58:54

你可以提供一些测试情况下,这里的一个尝试,没有测试很实在:

def months_between d1, d2 
    d1, d2 = d2, d1 if d1 > d2 
    (d2.year - d1.year)*12 + d2.month - d1.month - (d2.day >= d1.day ? 0 : 1) 
end 

这解决月份边缘的情况下(即2009年3月15日 - 2010年1月12日)

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