Yo uso las siguientes funciones realizando una resta compuesta entre dos fechas
La función DIFFTIME realiza la resta danto el resultado en una cadena que se divide en dias-meses-años.
Formato:
=DIFFTIME(FECHA FINAL, FECHA INICIAL)
La función Edad usa un parametro (1-3) para devolver solamente la edad en días, meses o años descomponiendo la cadena.
=EDAD(CADENA_FECHA,VALOR)
Donde Valor
1 Días
2 Mes
3 Año
La función DayMonth me devuelve los días que tiene un mes en un año especificos
Asi:
Para restar dos Fechas
s = DIFFTIME(DATE(), FECHA_DE_NACIMIENTO)
SI DESEO SOLAMENTE LOS AÑOS
R = EDAD(S,3)
PROCEDURE DIFFTIME
LPARAMETER Date01, Date02
LOCAL mInit,dInit,yInit, mEnd, dEnd,yEnd
LOCAL dNew,mNew,yNew
LOCAL Aux
Aux = SPACE(0)
yInit = YEAR(Date02)
mInit = MONTH(Date02)
dInit = DAY(Date02)
yEnd = YEAR(Date01)
mEnd = MONTH(Date01)
dEnd = DAY(Date01)
IF dEnd < dInit
mEnd = IIF(mEnd > 1,mEnd-1,12)
yEnd = IIF(mEnd = 12,yEnd-1,yEnd)
dEnd = dEnd + DayMonth(mEnd,yEnd)
ENDIF
IF mEnd < mInit
mEnd = mEnd + 12
yEnd = yEnd - 1
ENDIF
dNew = dEnd - dInit
mNew = mEnd - mInit
yNew = yEnd - yInit
Aux = ALLT(STR(dNew))+"-"+ALLT(STR(mNew))+"-"+ALLT(STR(yNew))
RETURN Aux
ENDPROC
PROCEDURE Eda