我目前有这个不太理想的解决方案:
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
以同时考虑Date
,Time
和DateTime
。
我无法帮助,但认为有更简洁的方法来完成上述工作。
答案 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
一个更好的版本可能是:
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