Calculate Days Between Two Dates

13,378

You're trying to store a non-date value (the number of days between two dates) in a TDateTime value. Since you don't want a date, use a double instead, and interpret it as a double:

var
  DaysDiff: Double;
begin
  DaysDiff := Date2.Date - Date1.Date;
  ShowMessage(FloatToStr(DaysDiff));
end;

Better yet, use the functions in DateUtils to do the work for you. If you need just whole days, use DaysBetween:

var
  DaysDiff: Integer;
begin
  DaysDiff := DaysBetween(Date2.Date, Date1.Date);
  ShowMessage(IntToStr(DaysDiff));
end;

If you need fractional (partial) days, use DaySpan:

var
  DaysDiff: Double;
begin
  DaysDiff := DaySpan(Date2.Date, Date1.Date);
  ShowMessage(FloatToStr(DaysDiff));
end;
Share:
13,378

Related videos on Youtube

Hayrulla Melibayev
Author by

Hayrulla Melibayev

By day: Working working By Night: Working again

Updated on June 04, 2022

Comments

  • Hayrulla Melibayev
    Hayrulla Melibayev almost 2 years

    Please help me find days between two dates.

    I have two objects TDBDateEdit date1 and date2.

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

    I put to date1 = 07.10.2015

    to date2 - 15.11.2015

    Result must be: 39

    But program gives me result: 07.02.1900


    I found DaysBetween function. and I changed my codes like that

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

    But programs says Result: 07.02.1900

    • David Heffernan
      David Heffernan over 8 years
      Ask yourself how DateToStr knows you want to interpret the value as a time span or a date?
  • Hayrulla Melibayev
    Hayrulla Melibayev over 8 years
    Thanks for everyone I understand my mistake. And problem solved