小弟有一个问题要问啊?(50分)

  • 主题发起人 主题发起人 金海
  • 开始时间 开始时间

金海

Unregistered / Unconfirmed
GUEST, unregistred user!
我想问下如何得到两个日期之间相差的天数,例如:2003-04-21和2003-02-01之间相差
多少天,我本来以为这样用这个日期相减就可以得到它们之间的相差天数,但相减的结果
切是"1900-03-19"。希望各位老兄多多指教!
 
好象没有相关函数,但可以自己定义
type TDateDiff=record
days,hours,minutes,seconds,mseconds:integer;
end;
function GetDateDiff(const Date1,Date2:TDateTime):TDateDiff;
var Diff:TDateTime;
temp:TDateDiff;
begin
Diff:=abs(Date1-Date2);
temp.days:=trunnc(Diff);
Diff:=(Diff-temp.days)*24;
temp.hours:=trunnc(Diff);
Diff:=(Diff-temp.hours)*60;
temp.minutes:=trunnc(Diff);
Diff:=(Diff-temp.minutes)*60;
temp.seconds:=trunnc(Diff);
Diff:=(Diff-temp.seconds)*1000;
temp.mseconds:=trunnc(Diff);
Result:=temp;
end;
 
相減后轉成整數就行了.
var
Days:Integer;
begin
Days:=Trunc(Date1-Date2);
end;
 
此过程返回两个TDateTime的经过时间(年、月、日、时、分、秒)

procedure timediff(FromDate, ToDate: TDateTime; var Y, M, D, H, N, S, MS: word);
var
d: TDateTime;
begin
d := ToDate-FromDate;
decodedate(d, y, m, d);
decodetime(d, h, n, s, ms);
end;
 
这样也行
procedure TForm1.Button1Click(Sender: TObject);
var
t : Word;
begin
DecodeDate(DateTime2-DateTime1,t,t,t);
Edit1.Text:=IntToStr(t);
end
 
function GetWorkDates(D1, D2: TDate): Integer;
var
I:Integer;
WeekS,WeekMod:Integer;
WorkDate:Integer;
begin
Result:=0;
if D1>=D2 then exit;
I:=D2-D1;
WeekS:=I div 7;
WeekMod:=I mod 7;
WorkDate:=Weeks * 5;

for I:= 0 to WeekMod-1 do
begin
if not ((DayOfWeek(D2-I)) in [1,7]) then
Inc(WorkDate);
end;

Result:=WorkDate;
end;
 
你试一下:
MessageDlg(inttostr(trunc(StrToDate('2003-04-21')-StrToDate('2003-02-01'))),
mtInformation,[mbOK],0);

结果是79天
 
MessageDlg(inttostr(trunc(StrToDate('2003-04-21')-StrToDate('2003-02-01'))),
mtInformation,[mbOK],0);
 
Delphi中有函数的

function DaysBetween(const ANow, AThen: TDateTime): Integer;

描述:
根据两个TDateTime类型的日期时间变量 ANow 和 AThen,DaysBetween函数能得到两者之间的
天数的差距。
DaysBetween 仅仅根据天数的不同来计算。因此,对于 1999年12月31日 下午11点59分 到
2000年1月1日 11点58分,该函数得到的结果是 0,因为两者之间的时间差别还差 1 分钟才到
1 天。

 
我比较同意smorkingroom的观点,既简单又容易。
可是有些地方算起来不对。
需改进~
function DiffDate(Date1,Date2: TDate): Integer;
begin
if Date1=Date2 then
result := 0 //如果两个时间相等的话就返回0天。
else
begin
if Trunc(Date1-Date2)>0 then
result := Trunc(Date1-Date2)//如果第一个时间大于第二个时间,则返回距离多少天
if Trunc(Date1-Date2)<0 then
result := ABS(Trunc(Date-Date))//如果第一个时间小于第二个时间则返回预计多少天
end;
end;
 
谢谢各位老兄的指教!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
867
DelphiTeacher的专栏
D
后退
顶部