把时间调到2009-02-28然后执行
procedure TForm1.Button1Click(Sender: TObject);
VAR T:  TDateTime;
S:STRING;
begin
T:=incMonth(NOW(),1);
S:=DATETOSTR(T);
end;发现S='2009-03-28',而不是我要的2009-03-31,怎么解决?其他日期好像没有问题,就这个日期有问题!

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);
    VAR
      T:  TDateTime;
      S:STRING;
    begin
      T:=incMonth(NOW(),1);
      if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then
        T:= incDay(T,3);
      S:=DATETOSTR(T);
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    VAR
      T:  TDateTime;
      S:STRING;
    begin
      T:=incMonth(NOW(),1);
      if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then
        T:= incDay(T,3);
      S:=DATETOSTR(T);
    end;正解
      

  3.   

    1,2楼正解VAR 
      T:  TDateTime; 
      S:STRING; 
    begin 
      T:=incMonth(NOW(),1); 
      if (MonthOfTheYear(now)=2) and (dayoftheMonth(now)=28) then //判断是2月并且是28天,如果是29天的话同样这样判断,下面的T:=incDay(T,2)
        T:= incDay(T,3); 
      S:=DATETOSTR(T); 
    end; 
      

  4.   

    var
      dt: TDateTime;
    begin
      dt := RecodeDate(dt,2009,2,28);
      dt := IncMonth(dt);
      dt := EndOfTheMonth(dt);
      ShowMessage(DateToStr(dt));
    end;
      

  5.   

    var
      dt: TDateTime;
    begin
      dt := RecodeDate(dt,2009,2,28);
      dt := IncMonth(dt);
      dt := EndOfTheMonth(dt);
      ShowMessage(DateToStr(dt));
    end;
      

  6.   

    剛看了下,應該是DELPHI的函數有問題; 原來的
    procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
    var
      DayTable: PDayTable;
      Sign: Integer;
    begin
      if NumberOfMonths >= 0 then Sign := 1 else Sign := -1;
      Year := Year + (NumberOfMonths div 12);
      NumberOfMonths := NumberOfMonths mod 12;  Inc(Month, NumberOfMonths);
      if Word(Month-1) > 11 then    // if Month <= 0, word(Month-1) > 11)
      begin
        Inc(Year, Sign);
        Inc(Month, -12 * Sign);
      end;  DayTable := @MonthDays[IsLeapYear(Year)];
      if Day >= DayTable^[Month] then Day := DayTable^[Month];
    end;
     修改前的:
    procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
    var
      DayTable: PDayTable;
      Sign: Integer;
    begin
      if NumberOfMonths >= 0 then Sign := 1 else Sign := -1;
      Year := Year + (NumberOfMonths div 12);
      NumberOfMonths := NumberOfMonths mod 12;  Inc(Month, NumberOfMonths);
      if Word(Month-1) > 11 then    // if Month <= 0, word(Month-1) > 11)
      begin
        Inc(Year, Sign);
        Inc(Month, -12 * Sign);
      end;  DayTable := @MonthDays[IsLeapYear(Year)];
      if Day >= DayTable^[Month-1] then Day := DayTable^[Month];
    end;
      

  7.   

    照楼主这么说,2009-4-30 incmonth 后也不是2009-4-31了。BT。
      

  8.   

    取得下个月最后一天
    function monthlastday(yourDay:TDateTime;x:Integer):TDateTime;
    var
      var YYYY, MM, DD: Word;
    begin
      DecodeDate(yourDay,YYYY,MM,DD);
      // x:=0 下个月末;x:=1 上个月末;
      case x of
        0:Result:=IncDay(IncMonth(EncodeDate(YYYY,MM,1),2),-1) ;
        1:Result:=IncDay(EncodeDate(YYYY,MM,1),-1) ;
      else
        ShowMessage('x参数只有0和1可选');
      end;
    end;