在特定日期增加年份

时间:2015-07-30 15:43:48

标签: ruby date conditional-statements

在我的rails应用中,user可以subscribetournament,但在我需要检查我的用户是否有合适的订阅年龄之前(即他是在右边)类别...... a tournament has_one category)。所以我写的是:

elsif @tournament.category == "11 ans" && current_user.birthdate.year < 2004

我不喜欢2004年在我的代码中这样写的事实。我想写一些更有活力的东西。 类别的工作方式有点复杂:一个类别是基于从10月1日到次年9月30日的体育赛季。 因此,例如2015年9月30日,我们将从2015年运动季到2016年运动季。根据这个,为11岁的类别写出我的条件的好方法是写这样的东西

elsif @tournament.category == "11 ans" && current_user.birthdate.year < YEAR – 11

其中YEAR是当前的运动年。因此,我需要的是一种使YEAR符合“体育日历”逻辑的方法。想知道这样做的好方法吗?

2 个答案:

答案 0 :(得分:0)

为什么不计算创建锦标赛申请参赛资格的界限?例如,&#34;必须在2000年1月1日到2001年12月31日期间为13-15联赛#34;将翻译成这两个日期。

表示为范围:

age_limit = (tournament.birthdate_min..tournament.birthdate_max)

用它来测试:

age_limit.include?(current_user.birthdate)

如果没有年龄上限,请使用1900之类的最小日期。

将描述存储为"11 ans"然后对其进行硬编码测试会让您遇到麻烦。这是高度语言特定的,加上格式化的任何更改都可能会丢弃您的代码。如果必须,请使用简单的编码方法,或将描述简单化妆,数学部分表示为字段。

答案 1 :(得分:0)

我会改变参赛者的年龄,而不是锦标赛的年龄。因此,当月份大于9时,要么递增current_user.birthdate.year,要么在小于10时递减,取决于比赛发生时你认为是哪一个。

age = current_user.birthdate.month > 10 ? current_user.birthdate.year + 1 : current_user.birthdate.year