16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE^2:年齢計算・年月計算"
この発言は #00047 Athena さんのRE:年齢計算・年月計算 に対するコメントです
#47
終了日が12月の時の処理が入ってなかったので、修正しますm(_ _)m
少し整理しました(^^;
ResultType=0 は通常の年齢計算
ResultType=1 は経過年月(法律上の年齢計算)です。
■コード
//-------------------------------------------------------
function GetAge(S,E: TDateTime; ResultType:Integer):String;
var
YearS:String;
Year1,Month1,Day1,Year2,Month2,Day2:Word;
Y,M:Integer;
begin
Result:='';
try
DecodeDate(S,Year1,Month1,Day1);
DecodeDate(E,Year2,Month2,Day2);
if (ResultType=0) then //ResultType=0 通常の年齢
begin
if (Day1 > Day2) then
Dec(Month2);
end
else
begin //ResultType=1 経過年月(法律上の年齢)
if (Month2=12) then
begin
if (Day2=31)then
Inc(Year2);Month2:=1;Day2:=0;
end
else if E=EncodeDate(Year2,Month2+1,1)-1 then
begin
Inc(Month2);Day2:=0 ;
end;
if Day1 > Day2+1 then
Dec(Month2);
end;
M:=Month2-Month1;
Y:=Year2-Year1;
case M of
-12..-1 : begin Dec(Y); M:=12+M; end;
end;
if Y<=0then
YearS:=''
else YearS:=IntToStr(Y)+'年';
Result:=YearS + IntToStr(M)+ 'ヶ月';
except
Messagedlg('値が不正です', mtwarning,[mbOK],0) ;
end;
end;
//例
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetAge(StrToDate(Edit1.Text),Now,0)); //通常年齢
{ShowMessage(GetAge(StrToDate(Edit1.Text),Now,1)); }//経過(法律年齢)
end;
_/_/ Athena ( VYH00522 ) _/_/
Original document by Athena 氏 ID:(VYH00522)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|