function MinusDate(d1,d2: Tdate): string;
begin
  result := FloatToStr(d2 - d1);
end;

解决方案 »

  1.   

    functon DivDate(
      Dec1, Dec2: TDateTime): Integer;
    begin
      Result := Trunc(Dec1 - Dec2);
    end;
      

  2.   

    //运行的速度太差
    //但很管用哦!!!!
    //一的很简单的问题我写了这么多啊!.....function ZsSigned(mFloat: Extended): ShortInt; { 返回数值符号 }
    begin
      if mFloat = 0 then Result := 0
      else if mFloat < 0 then Result := -1
      else Result := +1;
    end; { ZsSigned }function ZsGetDay(mYear, mMonth: Word): Word; { 返回年月对应的天数 }
    begin
      case mMonth of
        1, 3, 5, 7, 8, 10, 12: Result := 31;
        2: if IsLeapYear(mYear) then Result := 29 else Result :=  28;
      else  //IsLeapYear是否是闰年
        Result := 30;
      end; { case[Month] }
    end; { ZsGetDay }procedure ZsIncDate(var nDate: TDate); { 日期加一天 }
    var
      vYear, vMonth, vDay: Word;
      vMonthDay: Word;
    begin
      DecodeDate(nDate, vYear, vMonth, vDay);
      vMonthDay := ZsGetDay(vYear, vMonth);
      if Succ(vDay) <= vMonthDay then
        vDay := Succ(vDay)
      else
      begin
        vDay := 1;
        if vMonth = 12 then
        begin
          vMonth := 1;
          vYear := Succ(vYear);
        end else vMonth := Succ(vMonth);
      end;
      nDate := EncodeDate(vYear, vMonth, vDay);
    end; { ZsIncDate }procedure ZsDecDate(var nDate: TDate); { 日期减一天 }
    var
      vYear, vMonth, vDay: Word;
      vMonthDay: Word;
    begin
      DecodeDate(nDate, vYear, vMonth, vDay);
      if Pred(vDay) >= 1 then
        vDay := Pred(vDay)
      else
      begin
        if vMonth = 1 then
        begin
          vMonth := 12;
          vYear := Pred(vYear);
        end else vMonth := Pred(vMonth);
        vMonthDay := ZsGetDay(vYear, vMonth);
        vDay := vMonthDay;
      end;
      nDate := EncodeDate(vYear, vMonth, vDay);
    end; { ZsDecDate }function ZsDateComp(mDateA, mDateB: TDate): ShortInt; { 日期比较 }
    var
      vYearA, vMonthA, vDayA: Word;
      vYearB, vMonthB, vDayB: Word;
    begin
      DecodeDate(mDateA, vYearA, vMonthA, vDayA);
      DecodeDate(mDateB, vYearB, vMonthB, vDayB);
      Result := ZsSigned((vYearA - vYearB) * 366 +
       (vMonthA - vMonthB) * 31 + (vDayA - vDayB));
    end; { ZsDateComp }function ZsDateSpace(mDateA, mDateB: TDate): Integer; { 返回两日期相差的天数 }
    var
      K: ShortInt;
    begin
      Result := 0;
      K := ZsDateComp(mDateA, mDateB);
      case K of
        +1:
        while K > 0 do
        begin
          Inc(Result);
          ZsDecDate(mDateA);
          K := ZsDateComp(mDateA, mDateB);
        end;
        -1:
        while K < 0 do
        begin
          Dec(Result);
          ZsIncDate(mDateA);
          K := ZsDateComp(mDateA, mDateB);
        end;
      end;
    end; { ZsDateSpace }/////////
    //一样的
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vDateA, vDateB: TDate;
    begin
      vDateA := StrToDate(Edit1.Text);
      vDateB := StrToDate(Edit2.Text);
      Caption := Format('%d(%d)', [ZsDateSpace(vDateA, vDateB), Round(vDateA - vDateB)]);
    end;
    ////////
      

  3.   

    (*//
    如果你要得到月的相差数
    如果你要得到年的相差数
    请用我的方法吧
    Pascal 6.0 ... Delphi5...都行
    *//)
      

  4.   

    这个问题是我问的,saxash 和 alphax的方法都好的!!!!!!zswang的方法我也试了一下,也可以,只是太复杂了一些吧!