我正在开发一个锦标赛包围应用程序,需要将一些日期进行比较,以便将它们放入指定的年龄组。我似乎无法弄清楚我会怎么写这样的东西。
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
谢谢
答案 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
然后定义年龄组:
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