2016-07-31 176 views
1

在我的Rails应用程序中,我有不同年龄组,学生根据他们的年龄有几个月分类。我想要一种能够计算学生接近年龄组结束时(例如18个月)以便通知用户的方式。有没有一种方法可以在Rails中进行月份和日期比较来实现这一点?所有的帮助表示赞赏。Rails按月计算年龄

UPDATE:

这我想通了,如何计算呢kid.dob.advance(months: 18)一个更简单的方法来确定当学生将达到年龄组的结束日期。

<% if kid.dob.advance(months: 17) <= Date.today && kid.dob.advance(months: 18) >= Date.today %> 

    // notification 

<% end %> 

这意味着用户将在学生到达年龄组结束后的30天内通知。数字可以更改为存储在数据库中的数据,也可以工作。干杯。

回答

0

由于每个年龄段代表学生的出生日期后的已知天数,因此可以通过比较他们的年龄(以天为单位)与每个特定年龄段的上限(也以天为单位)来获得要查找的内容。

age_groups = [6.months, 12.months, 18.months, 24.months, 36.months] 
student_age_in_days = (Date.today - student.birthdate) 

group_nearing_end = age_groups.detect do |threshold| 
    student_age_in_days.between?(threshold - 5.days, threshold)  
end 

if group_nearing_end 
    # send notification 
end 
0

这里是我的方式做到这一点:

def age_in_months(date_of_birth) 
    return 0 unless date_of_birth 
    Time.zone.today.month + Time.zone.today.year * 12 - date_of_birth.month - date_of_birth.year * 12 
end 

我也看到了这个实现:

def age_in_months(date_of_birth) 
    date_of_birth ? ((Time.zone.today - date_of_birth)/30.437).to_i : 0 
end