title: Ruby age method using date of birth including months
body: <p>I have a method on my user model to calculate the user's age and return a human readable string.  My user's can be between 1 month old and above so the returned string is different depending on if the person is "2 months old" or "1 year old" or "2 years and 3 months old".</p>
  
  <p>I have reviewed  few SO posts to come to this solution.  Is there anything I am missing?  Leap years?  Thank you!</p>
  
  <pre><code>def age
      dob = self.date_of_birth
  
      # if a date of birth is not nil
      if dob != nil 
  
        # get current date  
        now = Date.current
  
        # has person had their birthday yet this year
        had_birthday = ((now.month &gt; dob.month || (now.month == dob.month &amp;&amp; now.day &gt;= dob.day)) ? true : false) 
  
        # if yes then subtract this year from birthday year, if not then also subtract 1 to get how many full years old they are
        years = now.year - dob.year - (had_birthday ? 0 : 1)
  
        # get the calendar month difference from birthdya calendar month and today's calendar month.  if they have not had their birthdya yet then subtract the difference from 12
        months = had_birthday ? now.month - dob.month : 12 - (now.month - dob.month)
  
        # for under 1 year olds
        if years == 0
          return months &gt; 1 ? months.to_s + " months old" : months.to_s + " month old"  
  
        # for 1 year olds
        elsif years == 1
          return months &gt; 1 ? years.to_s + " year and " + months.to_s + " months old" : years.to_s + " year and " + months.to_s + " month old" 
  
        # for older than 1
        else
          return months &gt; 1 ? years.to_s + " years and " + months.to_s + " months old" : years.to_s + " years and " + months.to_s + " month old"
        end
  
      # No date of birth saved so can not calculate age
      else
        return "No Date of Birth"
      end
    end
  </code></pre>