Delphi4でTDateTimeの値を比較するには?

解決


レプシー  2013-01-26 01:48:54  No: 43691

Delphi4でTDateTime型の変数2つを比較して4か月以上離れている場合の動作を作成したいのですが、比較する関数は無いでしょうか?

調べていたところDateUtils.pasにあるMonthsBetweenで比較できるようでしたが、Delphi6,7のインストールフォルダにはありましたが、Delphi4には存在しませんでした。(Delphi6から実装されたもの?)


レプシー  2013-01-26 02:13:26  No: 43692

DateUtils.pas内の関数を見ていたところ
MonthsBetweenよりもWithinPastMonthsの方がやりたいことに近かったようです。

if WithinPastMonths(Now(), DateTime1, 3) then
begin
  〜
end;

をDelphi4で行いたいです。


uk  2013-01-26 03:47:25  No: 43693

単に月数だけでいいなら、簡単に比較できませんか?
例えば年を12倍して月数に代えて引き算、
4以内ならTrueとか。

下手にないものねだりをするより、作ってしまった方が
簡単では?

あと、上記はあくまでも提示された内容程度の動作を
満たす仕様です。詳細な要件が示されていないため、
自作する場合はこれ以上の助言はできません。


3K  2013-01-27 00:42:37  No: 43694

Delphi4にもありそうな気がしますが
IncMonth
で出来るのでは


レプシー  2013-01-28 19:40:02  No: 43695

>ukさん、3Kさん
返信ありがとうございます。
Delphi4にもあったのですね…調べる能力が足りませんでした。
結果的には以下のように実装できました。

function TForm.MonthCheck(CheckDate: TDateTime): Boolean;
var
  dateBefore3m: TDateTime;
  dateAfter3m: TDateTime;
  dateNow: TDateTime;
begin
  dateNow := Now();
  dateBefore3m := Int(IncMonth(dateNow, -3)); //3か月前
  dateAfter3m := Int(IncMonth(dateNow, 3)); //3か月後
  if (CheckDate >= dateBefore3m) and (CheckDate <= dateAfter3m) then
    Result := True
  else
    Result := False;
end;

TDateTime型はどうやらある年月日を基準に日数が整数部に加算されているような動きをしていたので、
現在の月を調べて3か月後の日数と3か月前の日数を割り出して判定するという方法を用いれば
ukさんが提示して下さったように自分で作成することができるのではないかと思いました。

大変助かりました。ありがとうございます。


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

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






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