Добрый день, расчет стажа, например, можно посмотреть в макросе "Расчет стажа".
Исходный код функции TimeDifference, которая там используется, приводится ниже
/* Определение длины интервала в формате
{количество лет,количество месяцев,количество дней}
FUNCTION TimeDifference(dDateStart, dDateEnd)
Параметры:
dDateStart - дата начала интервала
dDateEnd - дата конца интервала
Возвращает массив {nYear, nMonth, nDay}
nYear - количество лет
nMonth - количество месяцев
nDay - количество дней
*/
FUNCTION TimeDifference(dDateStart, dDateEnd)
LOCAL nYear1, nMonth1, nDay1
LOCAL nYear2, nMonth2, nDay2
LOCAL nMonth, nDay, nYear
LOCAL j, k, d, dStartYear, dStartMonth
IF dDateStart > dDateEnd .OR. EMPTY(dDateStart) .OR. EMPTY(dDateEnd)
RETURN {0, 0, 0}
ENDIF
dDateEnd++
nYear1 := YEAR(dDateStart)
nMonth1 := MONTH(dDateStart)
nDay1 := DAY(dDateStart)
nYear2 := YEAR(dDateEnd)
nMonth2 := MONTH(dDateEnd)
nDay2 := DAY(dDateEnd)
nYear := nYear2-nYear1
IF nYear > 0
IF nMonth2 < nMonth1 .OR. (nMonth2 = nMonth1 .AND. nDay2 < nDay1)
--nYear
ENDIF
dStartYear := AddMonth(dDateStart,nYear*12)
ELSE
dStartYear :=dDateStart
ENDIF
j := k:= 0
DO WHILE .T.
d := AddMonth(dStartYear,++j)
IF d >dDateEnd
EXIT
ELSE
k := j
ENDIF
ENDDO
nMonth := k
dStartMonth := AddMonth(dStartYear,k)
nDay := dDateEnd - dStartMonth
RETURN {nYear, nMonth, nDay}