2015-10-07 148 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;