Разность дат

  • Автор темы pinhead
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

pinhead

Гость
#1
Даны ве даты типа TDateTime.
Надо получить их разность.
Например:
11.11.2001 11:11
12.12.2001 12:11
их разность:
0 минут
1 час
1 день
1 мссяц
0 лет
 
B

Barmutik

Гость
#2
Со временем аналогично...

Код:
procedure DateDiff(Date1, Date2: TDateTime; var Days, Months, Years: Word);
var
DtSwap: TDateTime;
Day1, Day2, Month1, Month2, Year1, Year2: Word;
begin
if Date1 > Date2 then begin
 DtSwap := Date1;
 Date1 := Date2;
 Date2 := DtSwap;
end;
DecodeDate(Date1, Year1, Month1, Day1);
DecodeDate(Date2, Year2, Month2, Day2);
Years := Year2 - Year1;
Months := 0;
Days := 0;
if Month2 < Month1 then begin
 Inc(Months, 12);
 Dec(Years);
end;
Inc(Months, Month2 - Month1);
if Day2 < Day1 then begin
 Inc(Days, DaysPerMonth(Year1, Month1));
 if Months = 0 then begin
  Dec(Years);
  Months := 11;
 end
 else Dec(Months);
end;
Inc(Days, Day2 - Day1);
end;
 
B

Barmutik

Гость
#3
И это до темы ... что бы компилялось...

Код:
function IsLeapYear(AYear: Integer): Boolean;
begin
Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;

function DaysPerMonth(AYear, AMonth: Integer): Integer;
const
DaysInMonth: array[1..12] of Integer =
 (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
Result := DaysInMonth[AMonth];
if (AMonth = 2) and IsLeapYear(AYear) then Inc(Result); { leap-year Feb is special }
end;
 
Статус
Закрыто для дальнейших ответов.