2015-10-07 144 views
1

请帮我找两天之间的日子。计算两个日期之间的天数

我有两个对象TDBDateEdit date1和date2。

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

我向date1 = 07.10.2015

date2 - 15.11.2015

结果必然是:39

但节目给我的结果是:07.02.1900


我发现DaysBetween功能。我改变了我的代码一样,

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

但节目说结果:07.02.1900

+0

您正在计算一个数字(39),然后将结果存储在日期中,因此它显示为日期(07.02.1900)。 –

+1

问问你自己DateToStr是如何知道你想把这个值解释为时间跨度或日期的? –

回答

7

你试图存储在TDateTime值非日期值(天的两个日期之间的数字)。既然你不想日期,使用双相反,把它解释为一个双:

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; 
+0

感谢大家,我明白我的错误。问题解决了 –

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;