优雅的方式来计算铁路中两个日期之间的年数?

时间:2015-01-15 15:41:03

标签: ruby-on-rails

我目前有这个不太理想的解决方案:

  def years_between_dates(date_from, date_to)
    ((date_to.to_time - date_from.to_time) / 1.year.seconds).floor
  end

计算不必精确(闰年等),但确实需要相当准确并考虑到数月。 3。8年应该返回3年,因此floor

我正在转换to_time以同时考虑DateTimeDateTime

我无法帮助,但认为有更简洁的方法来完成上述工作。

3 个答案:

答案 0 :(得分:3)

我偶然发现了这个,寻找其他东西...

我疯了吗?你不能只是做

def years_between_dates(date_from, date_to)
  date_to.year - date_from.year
end

或者如果以后需要它说“年”:

def years_between_dates(date_from, date_to)
  return "#{date_to.year - date_from.year} years"
end

答案 1 :(得分:2)

看起来像你的事实上是最优雅的方式。

即使在distance_of_time_in_words rails的定义中:

distance_in_minutes = ((to_time - from_time) / 60.0).round
distance_in_seconds = (to_time - from_time).round

Reference

一个更好的版本可能是:

def years_between_dates(date_from, date_to)
  ((date_to - date_from) / 365).floor
end

答案 2 :(得分:0)

如果你想得到两个日期之间的实际年份,你必须考虑月份和日期,例如如果你想得到 2010-10-01 到 2021-09-09 之间的日期,那么实际年份必须是 10 年。然后就可以使用下一个函数了:

  def years_between_dates(since_date, until_date)
    years = until_date.year - since_date.year
    if (until_date.month < since_date.month) ||
       (until_date.month == since_date.month && since_date.day < until_date.day)
      years -= 1
    end
    years
  end