P S*_*ved 20 ruby datetime ruby-on-rails
这个问题是针对其他语言的,所以让我们来看看Ruby吧.
如何计算给定日期过去的完整年数?你可能已经猜到了,这是自动计算人的年龄.最接近的是distance_of_time_in_wordsRails helper,所以下面的模板
Jack is <%= distance_of_time_in_words (Time.now, Time.local(1950,03,22)) %> old.
Run Code Online (Sandbox Code Playgroud)
产量
Jack is over 59 years old.
Run Code Online (Sandbox Code Playgroud)
但我需要更精确的功能,只产生数字.有吗?
如果存在某种Ruby on Rails辅助函数,这是可以的,尽管纯Ruby解决方案会更好.
编辑:问题的要点是需要一个非近似的解决方案.在2 次三月杰克的应该是59岁,第二天,他应该是60岁了.应考虑闰年等.
FMc*_*FMc 39
您是否想要年龄,因为人们通常会理解它,或者您是否正在寻找精确的时间测量?如果是前者,就没有必要担心闰年等并发症.你只需要计算几年的差异,如果这个人今年还没有过生日就减少它.如果是后者,您可以将经过的秒数转换为年,如其他答案所示.
def age_in_completed_years (bd, d)
# Difference in years, less one if you have not had a birthday this year.
a = d.year - bd.year
a = a - 1 if (
bd.month > d.month or
(bd.month >= d.month and bd.day > d.day)
)
a
end
birthdate = Date.new(2000, 12, 15)
today = Date.new(2009, 12, 14)
puts age_in_completed_years(birthdate, today)
Run Code Online (Sandbox Code Playgroud)
require 'date'
def years_since(dt)
delta = (Date.today - Date.parse(dt)) / 365
delta.to_i
end
Run Code Online (Sandbox Code Playgroud)
小智 5
基于与 @FMc First 类似的推理,我想出了以下方法,计算今天的年份和生日年份之间的差异。然后,将其与生日相加并检查结果日期:如果它大于今天,则将 diff 减少 1。要在 Rails 应用程序中使用,因为它依赖于ActiveSupport的years方法
def age(birthday, today)
diff = today.year - birthday.year
(birthday + diff.years > today ) ? (diff - 1) : diff
end
Run Code Online (Sandbox Code Playgroud)