计算两个日期之间的天数

4

请帮我找出两个日期之间的天数。

我有两个对象TDBDateEdit date1和date2。

procedure Torder_form.date2Click(Sender: TObject);
var d3: TDateTime;
begin 
    d3:=date2.date - date1.date;
    showmessage(datetostr(d3));
end.

我设置了 date1 = 2015年7月10日

date2 = 2015年11月15日

结果应该是:39

但程序给出的结果是:1900年2月7日


我发现了DaysBetween函数,然后我更改了我的代码:

procedure Torder_form.date2Click(Sender: TObject);
var d3: TDateTime;
begin 
    d3:=DaysBetween(date2.date,date1.date);
    showmessage(datetostr(d3));
end.

但程序显示结果为: 1900年7月2日

你正在计算一个数字(39),然后将结果存储在日期中,因此它以日期的形式显示(07.02.1900)。 - freedomn-m
1
问问自己,DateToStr 如何知道你想要将值解释为时间跨度还是日期? - David Heffernan
2个回答

15

您正在尝试在TDateTime值中存储非日期值(两个日期之间的天数)。由于您不需要一个日期,所以请改用double类型,并将其解释为double类型:

var
  DaysDiff: Double;
begin
  DaysDiff := Date2.Date - Date1.Date;
  ShowMessage(FloatToStr(DaysDiff));
end;
更好的方法是使用 DateUtils 中的函数来为您完成工作。如果您只需要整天,请使用 DaysBetween
var
  DaysDiff: Integer;
begin
  DaysDiff := DaysBetween(Date2.Date, Date1.Date);
  ShowMessage(IntToStr(DaysDiff));
end;
如果需要分数(部分)天数,请使用DaySpan
var
  DaysDiff: Double;
begin
  DaysDiff := DaySpan(Date2.Date, Date1.Date);
  ShowMessage(FloatToStr(DaysDiff));
end;

谢谢大家,我明白了我的错误。问题已经解决。 - Hayrulla Melibayev

0

在我的一个项目中,我遇到了相同的问题。但是在 Delphi 的帮助文件中进行了一点搜索之后,我发现 Delphi 提供了丰富的日期函数集合。无论如何,你可以使用 'DaysBetween' 函数来解决你的问题。我的代码大致是这样的:

procedure TForm1.btnResultClick(Sender: TObject);
var
  FirstDate, SecondDate: TDateTime;
  format:TFormatSettings;
  intDays: Integer;
begin
  format:= TFormatSettings.Create();
  format.ShortDateFormat :=  'yyyy/mm/dd';
  FirstDate := StrToDate(eFirstDate.Text,format);
  SecondDate := StrToDate(eSecondDate.Text,format);
  intDays:= DaysBetween(FirstDate,SecondDate);
  eFinalDate.Text:= intToStr(intDays);
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接