Разность дат

Тема в разделе "Delphi - Компоненты", создана пользователем pinhead, 29 мар 2006.

Статус темы:
Закрыта.
  1. pinhead

    pinhead Гость

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

    Barmutik Гость

    Со временем аналогично...

    Код (Text):
    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;
     
  3. Barmutik

    Barmutik Гость

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

    Код (Text):
    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;
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей