*PROCEDURE calcedad
LPARAMETERS tdFecha1,tdFecha2
***************************
*tdFecha1 es la fecha inferior
*tdFecha2 es la fecha superior o Date()
* Devueve un objeto Empty (objresp)
* con 4 propiedades:
* Edad, Años, Meses, Dias
************************************
LOCAL nDetanos,nMeses,nDias,cTiempo,;
cAno,cmes,cdia,zDias1,zDias2,;
xmMes,xmAno
IF VARTYPE(tdFecha1)#"D"
MESSAGEBOX("El primer parámetro debe ser tipo Date.")
RETURN null
ENDIF
if VARTYPE(tdFecha2)#"D" OR EMPTY(tdFecha2)
tdFecha2 =Date()
ENDIF
IF tdFecha1 > tdFecha2
RETURN null
ENDIF
nDetanos =Year(tdFecha2)-Year(tdFecha1) - 1
nMeses =12-Month(tdFecha1) + Month(tdFecha2) - 1
IF DAY(tdFecha2)>=DAY(tdFecha1)
nMeses=nMeses + 1
ENDIF
if nMeses >= 12
nMeses =nMeses - 12
nDetanos =nDetanos + 1
endif
if Day(tdFecha1)=Day(tdFecha2)
nDias =0
else
zDias1 =Day(tdFecha1)
zDias2 =Day(tdFecha2)
if Day(tdFecha2) > Day(tdFecha1)
nDias =Day(tdFecha2)-Day(tdFecha1)
else
xmMes =month(tdFecha2)-1
xmano =Year(tdFecha2)
if xmMes = 0
xmMes =12
xmano =xmano-1
endif
DO case
CASE INLIST(xmMes,1,3,5,7,8,10,12)
zFin1=31
CASE INLIST(xmMes,4,6,9,11)
zFin1=30
OTHERWISE
zFin1=IIF(EMPTY(DATE(xmAno,xmMes,29)),28,29)
ENDCASE
nDias =Zdias2 + Zfin1 - Zdias1
endif
endif
cano =iif(nDetanos>1," Años "," Año ")
cmes =iif(nmeses>1," Meses "," Mes ")
cdia =iif(ndias>1," Días "," Día ")
cTiempo =Ltrim(str(nDetanos))+cano+ltrim(str(nmeses))+cmes+ltrim(str(ndias))+cdia
* Crea el objeto de respuesta
objResp=NEWOBJECT("Empty")
ADDPROPERTY(objResp,"Edad",cTiempo)
ADDPROPERTY(objResp,"Años",nDetAnos)
ADDPROPERTY(objresp,"Meses",nMeses)
ADDPROPERTY(objresp,"Dias",nDias)
REturn objResp