Показать сообщение отдельно
  #3  
Старый 26.05.2016, 06:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, можно попробовать попользоваться функциями DaysBetween и MonthsBetween (в зависимости от того, какая точность нужна). Я бы смотрел на последнюю, с небольшой ручной корректировкой.
Тут еще есть нюансы:
1. Могут ли диапазоны пересекаться?
2. Есть еще правило, что если перерыв в работе меньше, допустим, месяца (в зависимости от конторы, например, на загран, если не ошибаюсь, это 3 месяца), то стаж считается непрерывным.
В зависимости от ответов на эти вопросы, код будет разный.
Если по простому, с точностью до целого месяца, то примерно так:
Код:
uses DateUtils;

type
  TPeriod = record
    dStart, dEnd : TDateTime;
  end;

var
  A : Array Of TPeriod; 
  I : Integer;
  S : Integer;

  Y, M : Integer;

// Тут заполняем A с формы периодами работы

S := 0;
for I := Low(A) To High(A) Do
  S := MonthsBetween(A[i].dStart,A[i].dEnd);

Y := S div 12; // лет
M := S mod 12; // месяцев
Ответить с цитированием