获取Ruby中经过的月数

获取Ruby中经过的月数,ruby,Ruby,在ruby中,有没有一种简单的方法可以获得两个日期之间经过的月数(多年) 您可以提供一些测试用例,这里有一个尝试,实际上没有进行过很多测试: 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 您可以提供一些测试用例,这里有一个尝试,实际上没有进行过很多测试: def

在ruby中,有没有一种简单的方法可以获得两个日期之间经过的月数(多年)

您可以提供一些测试用例,这里有一个尝试,实际上没有进行过很多测试:

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

您可以提供一些测试用例,这里有一个尝试,实际上没有进行过很多测试:

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

我找到了这个解决方案,它似乎是合乎逻辑的,而且似乎是有效的

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)

参考资料:

我找到了这个解决方案,它似乎合乎逻辑,而且似乎有效

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)

参考资料:

这说明了月份边缘情况。(即2009年3月15日至2010年1月12日)

def月数(d1、d2)
d1,d2=d2,如果d1>d2,则为d1
y、 m,d=(d2.year-d1.year),(d2.month-d1.month),(d2.day-d1.day)
如果d<0,则m=m-1
y、 如果m<0,则m=(y-1),(m+12)
y*12+m
结束

这解决了月份边缘案例(即2009年3月15日至2010年1月12日)

def月数(d1、d2)
d1,d2=d2,如果d1>d2,则为d1
y、 m,d=(d2.year-d1.year),(d2.month-d1.month),(d2.day-d1.day)
如果d<0,则m=m-1
y、 如果m<0,则m=(y-1),(m+12)
y*12+m
结束