年齢計算

機能:

年齢計算を行います。


解説:

 引数や戻り値に関してはソースコード内のコメントを参照して下さい。普通の年齢計算は GetAge() です。民法上の年齢計算には GetAgeC() を使います。


ソースコード:

// 年齢計算を行う
// -----------------------------------------------------------------------------
//  aBirthDay: 誕生日
//  aBaseDay : 基準日
//  result   : 満年齢
// -----------------------------------------------------------------------------
function GetAge(aBirthDay, aBaseDay: TDateTime): Integer;
var
  Year1, Month1, Day1: WORD;
  Year2, Month2, Day2: WORD;
  dBirthDay, dBaseDay: TDateTime;
begin
  dBirthDay := aBirthDay;
  DecodeDate(dBirthDay, Year1, Month1, Day1);
  DecodeDate(aBaseDay , Year2, Month2, Day2);
  if (Month1 = 2and (Day1 = 29and (not IsLeapYear(Year2)) then
    dBirthDay := dBirthDay + 1;
  DecodeDate(dBirthDay, Year1, Month1, Day1);
  result := Year2 - Year1;
  dBaseDay := EncodeDate(Year2, Month1, Day1);
  if dBaseDay > aBaseDay then
    Dec(result);
end;

// 年齢計算を行う(民法)
// -----------------------------------------------------------------------------
//  aBirthDay: 誕生日
//  aBaseDay : 基準日
//  result   : 満年齢
// -----------------------------------------------------------------------------
function GetAgeC(aBirthDay, aBaseDay: TDateTime): Integer;
var
  Year1, Month1, Day1: WORD;
  Year2, Month2, Day2: WORD;
  dBirthDay, dBaseDay: TDateTime;
begin
  dBirthDay := aBirthDay - 1;
  DecodeDate(aBaseDay , Year2, Month2, Day2);
  DecodeDate(dBirthDay, Year1, Month1, Day1);
  result := Year2 - Year1;
  dBaseDay := EncodeDate(Year2, Month1, Day1);
  if dBaseDay > aBaseDay then
    Dec(result);
end;

 ソースコード中で使われている IsLeapYear() 関数は指定された年が閏年であるかを判定する関数です。SysUtils 名前空間にあるハズですが、なければ以下のコードを使って下さい。

// 閏年かどうかを調べる
// -----------------------------------------------------------------------------
//  aYear:  西暦年
//  result: Trueなら閏年
// -----------------------------------------------------------------------------
function IsLeapYear(aYear: WORD): Boolean;
begin
  result := (aYear mod 4 = 0and ((aYear mod 100 <> 0or (aYear mod 400 = 0));
end;

 BACK