DELPHIにて経過年月日を取得するプログラムを書きたいです。
例えば生年月日から今日までの日付が与えられていて、
その経過期間を、○年○ヶ月○日とういう形で欲しいです。
プログラムをどう書けばできるでしょうか。教えて下さい。
経過期間を日数で計算するのは簡単だけど、
年、月で表現する場合は
1年は365日?閏年はどうするの?
1ヶ月は30日?31日?
わからないなぁ?
閏年もちゃんと計算して欲しいです。
1ヶ月は30日の月もあれば31日の月もあります。
それをプログラムに組み込んで下さい。
EXCELでいう、DATEDIFF関数と同じようなことがしたいのです。
ごめんなさい。
質問を勘違いしていました。
無理矢理計算するとこんな感じかな?
検証はしていませんのであしからず。
var
WyyyyD, WmmD, WddD: Integer;
WyyyyB, WmmB, WddB: Integer;
Wyear, Wmonth, Wday: Integer;
Wbirth, Wtoday: TDate;
begin
Wbirth := StrToDate('2000/01/01'); // 生年月日等
WyyyyB := copy(DateToStr(Wbirth), 1, 4);
WmmB := copy(DateToStr(Wbitrh), 5, 2);
WddB := copy(DateToStr(Wbirth), 8, 2);
Wtoday := Date; // 基準日(今日)
WyyyyD := copy(DateToStr(Wtoday), 1, 4);
WmmD := copy(DateToStr(Wtoday), 5, 2);
WddD := copy(DateToStr(Wtoday), 8, 2);
Wyear := WyyyyD - WyyyyB;
if (WmmD > WmmB) then
Wmonth := WmmD - WmmB
else
begin
Wyear := Wyear - 1;
Wmonth := WmmD + 12 - WmmB;
end;
// 以下適当に記述したので、あとは自分で考えて検証してね ;^_^)A
if (WddD > WddB) then
Wday := WdayD - WdayB
else
begin
Wmonth := Wmonth - 1;
Wday := WdayD - WdayB;
if (WmmD = 2) then
begin
if (IsLeapYear(WyyyyD) then
Wday := Wday - 29
else
Wday := Wday - 28;
end
else if ((WmmD = 4) or (WmmD = 6) or (WmmD = 9) or (WmmD = 11)) then Wday := Wday + 30
else Wday := Wday + 31;
end;
Wyear年、Wmonth月、Wday日ってな感じかな。
こんなに早くありがとうございます。早速試してみようと思います。
ツイート | ![]() |