求月份之差
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,需要算具体的你还是自己写吧。
所以 求月份之差应用方法一