Ruby on rails 如何在RubyonRails中显示年龄而不是出生日期?

Ruby on rails 如何在RubyonRails中显示年龄而不是出生日期?,ruby-on-rails,Ruby On Rails,可能重复: 我对Ruby on Rails非常陌生,我刚刚创建了一个小程序来存储人,使用他们的姓名、出生日期(dob)、性别等。但是,当我使用@persons=persons.find(:all))从数据库中查询人时,我尝试列出他们,我很想显示他们的年龄,即今天的-persons.dob,而不是他们的出生日期 提前道歉……我还在学习Ruby: require 'date' dob = Date.new(1976, 7, 4) now = Date.today age = ((now - dob

可能重复:


我对Ruby on Rails非常陌生,我刚刚创建了一个小程序来存储人,使用他们的姓名、出生日期(dob)、性别等。但是,当我使用
@persons=persons.find(:all)
)从数据库中查询人时,我尝试列出他们,我很想显示他们的年龄,即今天的-persons.dob,而不是他们的出生日期

提前道歉……我还在学习Ruby:

require 'date'
dob = Date.new(1976, 7, 4)
now = Date.today
age = ((now - dob) / 365.25).to_i

我猜有更好的方法…?

这段代码似乎适合我,只需几次测试

age = ((Date.today - dob).to_i / 365.25).ceil

其中,您将dob定义为日期对象。

Rails有两个日期帮助程序,其中包括distance\u of\u time\u in\u words:

today = Date.today
d = Date.new(today.year, dob.month, dob.day)
age = d.year - dob.year - (d > today ? 1 : 0)
据我记忆所及,它增加了一个“大约x年”,因此它在你的特殊情况下可能没有用处,除非你看一下来源并加以调整


否则,您可以直接调用Date.today.year(或dob.year)计算年份。

d
将始终返回true今天之后的生日年份是什么?:)@fl00r,再次检查d是如何构造的,d是今年的生日。我确实有一个问题的比较相反,虽然它失败的dob是在2月29日。对日期2月29日进行额外检查。最好每2月29日到2月28日进行一次更改。编辑:365不正确。但我对365.25不满意。出于这个原因,我将投票给瓦迪姆。这个函数将在控制器中定义。但是,在@persons=Person.find(:all)之后,我的@persons变量已经在视图中了,我不想在视图中包含这段代码,因为我认为这会打破MVC的概念!您应该将其作为帮助器方法添加到帮助器中
def age(dob)
  today = Date.today
  age = today.year - dob.year
  age -= 1 if dob.strftime("%m%d").to_i > today.strftime("%m%d").to_i
  age
end

dob = Date.new(1976, 4, 10)
age(dob)
#=> 35
dob = Date.new(1976, 5, 10)
age(dob)
#=> 34