[Dart] 現在の年齢を計算する

やりたいこと

現在開発中のflutterアプリで、生年月日から現在の年齢を計算する必要がありました。

dartのDateTimeクラスにはdifferenceメソッドがありますが、これだと差分の日数は取得できますが、年数は取得できません。

difference method - DateTime class - dart:core library - Dart API
API docs for the difference method from the DateTime class, for the Dart programming language.

差分日数を365で割れば年齢計算できるかなと思ったものの、閏年を考えるとうまくいかないパターンもあるので、どうにかして閏年を踏まえてシンプルに年齢を計算したいです。

実装

現在の日時から年齢を計算するメソッドを作成しました。これで閏年の場合も年齢を計算できます。

int getNowAge(DateTime birthday) {
  DateTime now = DateTime.now();

  int age = now.year - birthday.year; // 1
  if (now.month * 100 + now.day < birthday.month * 100 + birthday.day) { // 2
    age--;
  }
  return age;
}

解説

まず1では単純に現在の西暦から生年月日の西暦を引いています。

この場合、今年の誕生日をまだ迎えていない場合は1歳余分に足された値になっているため、今年の誕生日を迎えたかどうかを2のif文で行なって、迎えていない場合は年齢を1引いています。

今年の誕生日を迎えたかどうか、月を比較してから日を比較して・・・みたいなことをするのは面倒なので、MMDDの整数値の形にして比較することでロジックをシンプルにしています。

参考:

生年月日から年齢を簡易計算する数式 - Qiita
生年月日からシンプルに年齢を算出する数式とその証明※記事内の数式の図が表示されるまで1分ぐらい掛かることがあります##計算式誕生日から年齢を簡易的に求めたいとき、yyyymmdd形式で表記し…

コメント