Внешний вид сайта:

Функция расчета разницы между двумя датами

Однажды понадобилась функция для расчета разницы между двумя датами и вывода ее в формате n-количество дней n-количество месяцев и n-количество лет для расчета трудового стажа.

Вот что получилось:

// Вывод строки дней
function StrDays(iDay: integer): string;
begin
  Result:= ' дней ';
  case iDay of
    1, 21, 31: Result:= ' день ';
    2, 3, 4, 22, 23, 24: Result:= ' дня ';
  end;
end;

// Вывод строки месяцев
function StrMonths(iMonth: integer): string;
begin
  Result:= ' месяцев ';
  case iMonth of
    1: Result:= ' месяц ';
    2, 3, 4: Result:= ' месяца ';
  end;
end;

// Вывод строки лет
function StrYears(iYear: integer): string;
var
  s: string;
  sYear: string;
  i: integer;
begin
  result := ' лет ';
  if (iYear > 4) and (iYear < 21) then exit;
  sYear := IntToStr(iYear);
  s := Copy(sYear, Length(sYear), 1);
  i := StrToInt(s);
  case i of
    1: result := ' год ';
    2, 3, 4: result := ' года ';
  end;
end;

// Сама функция
function StrBetweenDate(Date1, Date2: TDate): string;
var
  id, im, iy: Integer;
  d: TDate;
begin
  Result:= '';
  if Date1 < Date2 then
  begin
    d:= Date1;
    Date1:= Date2;
    Date2:= d;
    Date1:= Date1 + 1;
  end;
  d:= DaysBetween(Date1 + 1, Date2);
  id:= DayOf(d);
  im:= MonthOf(d)-1;
  iy:= YearOf(d);
  iy:= iy - 1900;
  if im = 12 then
    begin
      im:= 0;
      inc(iy);
    end;
  if id = 31 then
  begin
    id:= 0;
    inc(im);
    if im = 12 then
    begin
      im:= 0;
      inc(iy);
    end;
  end;
  Result:= (IntToStr(iy)+ StrYears(iy) + IntToStr(im) +
            StrMonths(im) + IntToStr(id)+ StrDays(id));
end;

Пример использования

procedure TForm1.Button1Click(Sender: TObject);
var
  dt1, dt2: TDateTime;
begin
  dt1:=StrToDate('31.05.2006');
  dt2:=StrToDate('01.02.2008');
  ShowMessage(StrBetweenDate(dt1, dt2));
end;

Комментарии

Нет комментариев. Ваш будет первым!