PROCEDURE calcedad
LPARAMETERS xdFecha1,xdFecha2
******************************************
*xdFecha1 es la fecha inferior
*xdFecha2 es la fecha superior o Date() && si se omite, toma la fecha actual
* Devueve un objeto Empty (objresp)
* con 4 propiedades: Edad (Character) , Años (numeric), Meses (numeric)=, Dias (numeric)
* Si xdFEcha1 > xdFecha2 , devolverá NULL
*****************************************************************************************************
LOCAL nDetanos,nMeses,nDias,cTiempo,;
cAno,cmes,cdia,zDias1,zDias2,;
xmMes,xmAno
if EMPTY(xdFecha2)
xdFecha2 =Date()
ENDIF
IF xdFecha1 > xdFecha2
RETURN null
ENDIF
nDetanos =Year(xdFecha2)-Year(xdFecha1) - 1
nMeses =12-Month(xdFecha1) + Month(xdFecha2) - 1
IF DAY(xdFecha2)>=DAY(xdFecha1)
nMeses=nMeses + 1
ENDIF
if nMeses >= 12
nMeses =nMeses - 12
nDetanos =nDetanos + 1
endif
if Day(xdFecha1)=Day(xdFecha2)
nDias =0
else
zDias1 =Day(xdFecha1)
zDias2 =Day(xdFecha2)
if Day(xdFecha2) > Day(xdFecha1)
nDias =Day(xdFecha2)-Day(xdFecha1)
else
xmMes =month(xdFecha2)-1
xmano =Year(xdFecha2)
if xmMes = 0
xmMes =12
xmano =xmano-1
endif
*Zfin1 =bisumes(xmMes,xmano)
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