论坛首页 编程语言技术论坛

ruby计算年龄--为何我多了一岁?

浏览 1863 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-11-19   最后修改:2009-11-20

也许你认为ruby计算年龄很简单,但出于某些原因,其实并非如此。我们一般会将用户的生日存在一个DATE类型的字段里。


现在,我们一起来计算用户的年龄。

 

 def age
    Date.today.year - person.birthday.year
 end

 

这个方法对部分用户来说,完全没有问题。但是,为什么某些用户会凭空多出了一岁呢?


例如下面这种情况:今天是2008年1月3日,用户的生日是1979年1月14日,这种方法算出来是29岁,该用户实际是28岁。

 

因此我们需要一个更精确的方法来计算用户的年龄。

 

def age
    ((Date.today - person.birthday.to_date) / 365).floor
end

 

   发表时间:2009-11-20  
果真如此么?
0 请登录后投票
   发表时间:2009-11-20  
楼主不要误导大家哦。。
年龄算的正确与否和你对年龄的定义有关。比如虚岁,周岁等叫法。
第一种算法是这样理解的:每过一年就长一岁。。。
比较精确的是每过一次生日就长一岁。
def age
  years = Date.today.year - birth.year
  years + (Date.today < birth + years.year ? -1 : 0)
end


而楼主说的那种精准的方法是有问题的。
按照楼主的算法:一个2000年1月1日出生的人在2000年12月31日就1岁了...
0 请登录后投票
   发表时间:2009-11-20  
呵呵,楼主的做法是每365天是一岁,无视闰年
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics