求月份之差

1、DecodeDate

procedure TForm1.Button1Click(Sender: TObject);
var
   
wYear1,wYear2,wMonth1,wMonth2,wDay1,wDay2:word;
    wYearDiff,wMonthDiff:Integer;
    date1,date2:String;
begin
   
date1:='2009-12-01';
    date2:='2010-02-01';
    DecodeDate(StrToDateTime(date1),wYear1,wMonth1,wDay1);
    DecodeDate(StrToDateTime(date2),wYear2,wMonth2,wDay2);
    wYearDiff:=wYear2-wYear1;
    wMonthDiff:=(wMonth2-wMonth1)+wYearDiff*12;
    ShowMessage(IntToStr(wMonthDiff));     //得到的结果是2
end;

2、MonthsBetween(求法不准)

procedure TForm1.Button2Click(Sender: TObject);
var
  date1,date2,date3,date4:String;
  i,j:Integer;
begin
   
date1:='2009-12-01';
    date2:='2010-02-01';
    date3:='2010-01-01';
    date4:='2010-03-01';
    i:=MonthsBetween(StrToDateTime(date1),StrToDateTime(date2));
    j:=MonthsBetween(StrToDateTime(date3),StrToDateTime(date4));
    ShowMessage(IntToStr(i));      //得到的结果是2
    ShowMessage(IntToStr(j));     //得到的结果是1
end;

按道理的话,都应该得到2。

原因是这个是delphi的bug,他的时间是按照一个月30.4375几来除的,就是先取到daysBetween,即相隔多少天再除这个值,所以不准的,YearsBetween也不准,是除365.25几按一年来除。这2个有bug,需要算具体的你还是自己写吧。

所以  求月份之差应用方法一

posted @ 2010-07-17 14:20  鸽子888  阅读(158)  评论(0编辑  收藏  举报