获取Ruby中传递的月数

时间:2010-04-02 22:30:43

标签: ruby

是否有一种简单的方法可以获得红宝石中两个日期之间经过的月数(多年)?

3 个答案:

答案 0 :(得分:3)

我找到了这个解决方案,看似合乎逻辑,似乎有效。

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/

答案 1 :(得分:0)

你可以提供一些测试用例,这是一次尝试,没有真正测试过:

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

答案 2 :(得分:0)

这解决了月份边缘情况(即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