Ну, можно попробовать попользоваться функциями 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; // месяцев