Get person's age in Ruby

前端 未结 24 2963
忘了有多久
忘了有多久 2020-11-27 10:32

I\'d like to get a person\'s age from its birthday. now - birthday / 365 doesn\'t work, because some years have 366 days. I came up with the following code:

24条回答
  •  [愿得一人]
    2020-11-27 10:51

    Because Ruby on Rails is tagged, the dotiw gem overrides the Rails built-in distance_of_times_in_words and provides distance_of_times_in_words_hash which can be used to determine the age. Leap years are handled fine for the years portion although be aware that Feb 29 does have an effect on the days portion that warrants understanding if that level of detail is needed. Also, if you don't like how dotiw changes the format of distance_of_time_in_words, use the :vague option to revert to the original format.

    Add dotiw to the Gemfile:

    gem 'dotiw'
    

    On the command line:

    bundle
    

    Include the DateHelper in the appropriate model to gain access to distance_of_time_in_words and distance_of_time_in_words_hash. In this example the model is 'User' and the birthday field is 'birthday.

    class User < ActiveRecord::Base
      include ActionView::Helpers::DateHelper
    

    Add this method to that same model.

    def age
      return nil if self.birthday.nil?
      date_today = Date.today
      age = distance_of_time_in_words_hash(date_today, self.birthday).fetch("years", 0)
      age *= -1 if self.birthday > date_today
      return age
    end
    

    Usage:

    u = User.new("birthday(1i)" => "2011", "birthday(2i)" => "10", "birthday(3i)" => "23")
    u.age
    

提交回复
热议问题