2016-07-31 9 views
1

In meiner Rails App habe ich verschiedene Altersgruppen, nach denen die Schüler klassifizieren, abhängig davon, wie viele Monate ihr Alter ist. Ich möchte einen Weg, um zu berechnen, wann ein Student das Ende einer Altersgruppe erreicht (zum Beispiel 18 Monate), so dass der Benutzer benachrichtigt wird. Gibt es eine Möglichkeit, in Rails mit Monats- und Datumsvergleichen zu arbeiten? Alle Hilfe wird geschätzt.Schienen berechnen Alter in Monaten

UPDATE:

Dies ist eine noch einfachere Art und Weise, wie ich es herausgefunden berechnen kid.dob.advance(months: 18) bestimmt den Zeitpunkt, wenn der Schüler das Ende der Altersgruppe erreichen.

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

    // notification 

<% end %> 

Das bedeutet, dass der Benutzer innerhalb von 30 Tagen benachrichtigt wird, nachdem der Schüler das Ende der Altersgruppe erreicht hat. Die Zahlen können auch von einer DB in gespeicherte Daten geändert werden und es funktioniert. Prost.

Antwort

0

Da jede Altersgruppe eine bekannte Anzahl von Tagen nach dem Geburtsdatum des Schülers darstellt, können Sie bekommen, was Sie suchen nach ihrem Alter zu vergleichen (in Tagen) an den jeweiligen obere Grenze der Altersgruppe (auch in Tagen).

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

Hier ist meine Art und Weise, es zu tun:

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

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 

ich diese Umsetzung auch sah,