DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

年齢計算


  ∧,,∧  年齢計算ですー
 ミ,,゚Д゚彡
  ミつ[|lllll]) 
~ミ  ミ   誤動作があれば
  U U.   コメントに報告してくれ



MLで紹介されていた関数は
年令に負の値が入らなかったのと、条件判断の符号が理解しにくく
また、2月29日生れの人の事を考慮していないものもありましたので
そこを修正しました。



{-------------------------------
//年齢を調べる関数機能
  Age1/Age2
機能: 指定した日付の時の年齢を求めます。
      今日を指定する場合CheckDayにDateを代入してください
戻り値: 年齢
備考: CheckDayがBirthDayの前の日でも
      年齢が負の値になって正しい日付計算処理をします
      (必要ない処理かも…)
      計算するときに2通りの求め方をしてみました。
      age2の方が簡単でよいかと思います。
//-------------------------------}
function Age1(BirthDay, CheckDay:TDateTime):Integer;
var
 Year1,Month1,Day1,Year2,Month2,Day2: Word;
begin
//誕生日,任意の日を年月日単位にバラす
 DecodeDate(BirthDay, Year1, Month1, Day1);
 DecodeDate(CheckDay, Year2, Month2, Day2);

//現在(任意の年月日)の「年」から誕生日の「年」を引く
 Result := Year2 - Year1;

 //チェックしたい年がうるう年ではない場合
 if not IsLeapYear(Year2) then
 begin
  //誕生日がうるう日なら
  if (Month1=2) and (Day1=29) then
  begin
   Month1 := 3; Day1 := 1;
  end;
   //誕生日を3/1にしておく
 end;

//その年の誕生日を過ぎていなければさらに1歳引く
 If ( EncodeDate(Year2, Month2, Day2)
    < EncodeDate(Year2, Month1, Day1) ) then
  Result := Result - 1;
End;

function Age2(BirthDay, CheckDay:TDateTime):Integer;
var
 Year1,Month1,Day1,Year2,Month2,Day2: Word;
begin
//誕生日,任意の日を年月日単位にバラす
 DecodeDate(BirthDay, Year1, Month1, Day1);
 DecodeDate(CheckDay, Year2, Month2, Day2);

//現在(任意の年月日)の「年」から誕生日の「年」を引く
 Result := Year2 - Year1;

//その年の誕生日を過ぎていなければさらに1歳引く
 if (Month2 < Month1) then
 begin
  Dec(Result);
 end else
 if (Month2 = Month1) then
 begin
  if (Day2 < Day1) then
   Dec(Result);
 end;
End;
//-------------------------------

参考
[Delphi-ML:33755] [Delphi-ML:33757] Re: 生年月日から年齢を取得
2/29生まれの人の誕生日について
きょうは何の日~毎日が記念日~
http://www.nnh.to/02/29.html
Yomiuri On-Line / なんでもクエスチョン
「早生まれ」4月1日含むのはなぜ?
http://www.yomiuri.co.jp/nandemo/list/20010129.htm
AddinBox期間計算まとめ
http://www.h3.dion.ne.jp/~sakatsu/period_topic2.htm
スポンサーサイト

| 未分類 | 14:06 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/42-c3145a14

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。