1. ホーム
  2. ruby-on-rails

[解決済み] Ruby で年齢を取得する

2022-06-29 18:03:28

質問

誕生日から年齢を知りたいのですが。 now - birthday / 365 ではうまくいきません。なぜなら、366日の年もあるからです。次のようなコードを思いつきました。

now = Date.today
year = now.year - birth_date.year

if (date+year.year) > now
  year = year - 1
end

もっとRubyらしい年齢計算の方法はないのでしょうか?

どのように解決するのですか?

遅ればせながら、うるう年の2月29日に生まれた人の年齢を計算しようとすると、受け入れられた答えが恐ろしく壊れてしまいます。これは birthday.to_date.change(:year => now.year) を呼び出すと、無効な日付が作成されるからです。

代わりに以下のコードを使いました。

require 'date'

def age(dob)
  now = Time.now.utc.to_date
  now.year - dob.year - ((now.month > dob.month || (now.month == dob.month && now.day >= dob.day)) ? 0 : 1)
end