按出生日期计算年龄组内的年龄和地点

时间:2014-09-22 20:21:54

标签: ruby-on-rails ruby

我正在开发一个锦标赛包围应用程序,需要将一些日期进行比较,以便将它们放入指定的年龄组。我似乎无法弄清楚我会怎么写这样的东西。

6 - under = 2007-09-01 to present
8 - under = 2005-09-01 to 2007-08-31
10 - under = 2003-09-01 to 20050831

会是这样的吗?是否有更好的方法来比较彼此的日期。

def age_group
    if self.dob <= 20030901
        "10"
    elsif self.dob <= 20050901
        "8"
    else self.dob <= 20070901
        "6"
    end
end

谢谢

3 个答案:

答案 0 :(得分:3)

你当然可以遵守age_group方法,它没有任何问题。我只是这样调整它:

def age_group
    if self.dob <= 10.years.ago
        "10"
    elsif self.dob <= 8.years.ago
        "8"
    elsif self.dob <= 6.years.ago
        "6"
    end
end

答案 1 :(得分:0)

如果你这样做,你将不得不更新每年的截止日期。您可以计算年龄,然后从那里取出:

def age
  now = Time.now.utc.to_date
  now.year - birthday.year - (birthday.to_date.change(:year => now.year) > now ? 1 : 0)
end

(来自Get person's age in Ruby

然后定义年龄组:

def age_group
  if self.age <= 10
    "10"
  elsif ...
etc.

答案 2 :(得分:0)

case语句适用于此,因为它使用===进行比较。

require 'date'

R10U = (Date.parse("2003-09-01")..Date.parse("2005-08-31"))
R8U  = (Date.parse("2005-09-01")..Date.parse("2007-08-31"))
R6U  = (Date.parse("2007-09-01")..Date.today)

def age_group(dob)
  case Date.parse(dob)
  when R6U  then "6 - under"
  when R8U  then "8 - under"
  when R10U then "10 - under"
  else raise ArgumentError, "dob = '#{dob}' is out-of-range"
  end
end

age_group("2006-04-12")
  #=> "8 - under"
age_group("2004-11-15")
  #=> "10 - under"
age_group("2011-06-01")
  #=> "6 - under"
age_group("2002-04-30")
  #=> ArgumentError: dob = '2002-04-30' is out-of-range
age_group("2015-06-01")
  #=> ArgumentError: dob = '2015-06-01' is out-of-range