ruby-on-rails 优雅的方式来计算两个日期之间的年数在铁路?

ux6nzvsh  于 2023-07-01  发布在  Ruby
关注(0)|答案(4)|浏览(105)

我现在有一个不太理想的解决方案:

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

计算不一定要精确(W/闰年等),但确实需要相当准确,并考虑到月份。3.8年应该返回3年,因此是floor
我正在转换to_time以同时考虑DateTimeDateTime
我不禁想到有一种更简洁的方法来做到以上几点。

q35jwt9p

q35jwt9p1#

看起来你的方式是最优雅的。
即使在distance_of_time_in_words rails的定义中也有:

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

参考文献
一个更好的版本可能是:

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

f1tvaqid2#

我在找别的东西的时候偶然发现了这个...
我疯了吗?你就不能

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

我看到Pioo是正确的,这里有一个修订版本。但它也不能补偿闰年,这将需要更复杂的东西。我不会在精度是关键的情况下使用更长的时间。

def years_between_dates(date_from, date_to)
  years = (date_to - date_from).to_i / 365
  return "#{years} years"
end
vxbzzdmp

vxbzzdmp3#

如果你想得到两个日期之间的真实的年份,你必须考虑月份和日期,例如,如果你想得到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 && until_date.day < since_date.day)
      years -= 1
    end
    years
  end
0h4hbjxa

0h4hbjxa4#

就像这样简单:

((Time.now-1.year.ago)/1.year).abs

相关问题