Определите количество дней, используя календарь месяца Delphi - PullRequest
0 голосов
/ 31 марта 2020

Я использую двухмесячный календарь в своей форме. Я выбираю дату для каждого и хочу рассчитать количество дней между этими двумя днями. Я только код у меня есть

procedure TForm1.Button1Click(Sender: TObject);
Var
 N, m: TDate;
 d: Real;
 l,k:String;
begin
 N := (MonthCalendar1.Date);
 m := MonthCalendar2.Date;
 L := formatdatetime('dd', N);
 K:=formatdatetime('dd',M);
 d := StrToFloat(L)-StrToFloat(K);
 ShowMessage(FloatToStr(d));

end; 

Ответы [ 2 ]

5 голосов
/ 31 марта 2020

Вы можете использовать DaysBetween () из System.DateUtils, чтобы получить разницу в днях между двумя значениями TDateTime.

См. Документы: http://docwiki.embarcadero.com/Libraries/Rio/en/System.DateUtils.DaysBetween

Редактировать , см. Код:

uses System.DateUtils;

[..]

procedure TForm1.Button1Click(Sender: TObject);
var
  NumDays: Integer;    
begin
  NumDays := DaysBetween(MonthCalendar1.Date, MonthCalendar2.Date);     
  ShowMessage('Days between selected dates: ' + NumDays.ToString);    
end;
0 голосов
/ 31 марта 2020

Вам не нужен MonthCalendar, чтобы сделать это. Часть TDateTime к RHS десятичной точки фактически является «номером дня», поэтому, если вы вычтете одно из них из другого, вы найдете «дни между». Примените Trun c к обоим, чтобы отбросить части времени суток. См. http://docwiki.embarcadero.com/Libraries/Rio/en/System.TDateTime для определения TDateTime.

Так, например, даны

var
  D1,
  D2 : TDateTime;
  DaysBetween : Integer;

, а D1 и D2 - это два TDateTimes (которые можно ввести, если вы wi sh с использованием TMonthCalendar), затем

  DaysBetween := Trunc(D2) - Trunc(D1);

При вызове встроенной функции Trunc отбрасывается дробная часть времени TDateTime (то есть partr) справа от десятичной запятой), так что 23:59 в один день и 00:01 в следующий рассчитываются как один день. Это может или не может быть желаемый результат, в зависимости от вашего приложения, поэтому я предложил рассчитать его самостоятельно, а не использовать встроенную функцию DaysBetween.

...