este tambien funciona compañero
* HowOld.prg
* Toma dos fechas o fecha-hora y devuelve la diferencia como un string
de *caracteres
* de nn años y nn Meses devuelve NULL para fechas invalidas
LPARAMETERS pdDate1, pdDate2
* Declaración de variables
LOCAL lnYears, lnMonths, ldDate1, ldDate2, lcType, lcReturn
* Set the data type of lcReturn to Character
lcReturn = ""
* ahora seteamos su valor a .NULL.
lcReturn = .NULL.
* chequeamos el tipo de datos para el primer parametro
lcType = TYPE("pdDate1")
IF NOT lcType $ "DT"
* Illegal type for date
RETURN lcReturn
ENDIF
* Chequeamos el segundo
lcType = TYPE("pdDate2")
IF NOT lcType $ "DT"
* Illegal type for date
RETURN lcReturn
ENDIF
* Toma la fecha mas alta
ldDate1 = MAX(pdDate1,pdDate2)
* Toma la fecha mas baja
ldDate2 = MIN(pdDate1,pdDate2)
* Ahora calculamos los años y los meses
* comienza con cero años y cero meses
lnYears = 0
lnMonths = 0
* se mueve para atrás ldDate2 por 1 mes
ldDate2 = GOMONTH(ldDate2,1)
* Loop as long as ldDate1 is later than ldDate2
DO WHILE ldDate2 < ldDate1
* Agrega uno a lnMonths
lnMonths = lnMonths + 1
* Chequea por el paso de los años
IF lnMonths = 12
* incrementa los años
lnYears = lnYears + 1
* cero a los meses
lnMonths = 0
ENDIF
* Incrementa la fecha primitiva
ldDate2 = GOMONTH(ldDate2,1)
ENDDO
* Construye la cadena de retorno
IF lnYears > 0
* pone el numero de años
lcReturn = ALLTRIM(STR(lnYears)) + " Año"
IF lnYears > 1
* si hay mas de un año agrega la s
lcReturn = lcReturn + "s"
ENDIF
ENDIF
* agrega uno al numero de meses
lcReturn = lcReturn + " and " + ALLTRIM(STR(lnMonths)) + " Mes"
IF lnMonths <> 1
* si meses no es uno agrega la es
lcReturn = lcReturn + "es"
ENDIF
* devuelve la cadena
RETURN lcReturn