DELPHIで2つの日付の経過年月日をしりたい

解決


まっくん  2007-10-02 23:39:18  No: 27931

DELPHIにて経過年月日を取得するプログラムを書きたいです。
例えば生年月日から今日までの日付が与えられていて、
その経過期間を、○年○ヶ月○日とういう形で欲しいです。
プログラムをどう書けばできるでしょうか。教えて下さい。


はてな?  2007-10-02 23:44:18  No: 27932

経過期間を日数で計算するのは簡単だけど、
年、月で表現する場合は

1年は365日?閏年はどうするの?
1ヶ月は30日?31日?
わからないなぁ?


まっくん  2007-10-02 23:51:29  No: 27933

閏年もちゃんと計算して欲しいです。

1ヶ月は30日の月もあれば31日の月もあります。

それをプログラムに組み込んで下さい。


まっくん  2007-10-02 23:58:06  No: 27934

EXCELでいう、DATEDIFF関数と同じようなことがしたいのです。


はてな?  2007-10-03 00:09:05  No: 27935

ごめんなさい。
質問を勘違いしていました。
無理矢理計算するとこんな感じかな?
検証はしていませんのであしからず。

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日ってな感じかな。


まっくん  2007-10-03 00:16:22  No: 27936

こんなに早くありがとうございます。早速試してみようと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加