PROCEDURE Get_Edad
*!* -----------------------------------------------
*!* Parameteres
*!* td_Inf es la fecha inferior
*!* td_sup es la fecha superior o Date() (default)
*!* -----------------------------------------------
*!* Devuelve un objeto con las propiedades:
*!* Dias
*!* Meses
*!* Anios
*!* Str_large
*!* Str_ml
*!* Str_short
*!* BirthDay
*!* -----------------------------------------------
*!* Envió y respuesta
*!* loGet = get_Edad(DATE(1971,2,28) )
*!* IF !loResp.Error
*!* ? loGet.Str_Large
*!* ? loGet.BirthDay
*!* ENDIF
*!* loGet = null
*!* -----------------------------------------------
LPARAMETERS td_Inf,td_sup
TRY
LOCAL lnAnios,;
lnDias,;
lnMeses,;
lnAnio_Calc,;
lnMes_Calc,;
lnDias_Inf,;
lnDias_Sup,;
loREsp as Object, ;
loex AS Exception
loResp = NEWOBJECT("Empty")
ADDPROPERTY(loResp,"Error",.t.)
IF VARTYPE(m.td_sup)#"D"
td_sup = DATE()
ENDIF
if VARTYPE(m.td_Inf)!="D"
* Toma el inicio del año de td_sup
td_Inf = DATE(YEAR(td_sup),1,1)
endif
* Verifica que td_Inf <= td_Sup
IF m.td_Inf > m.td_Sup
ld_Pas = m.td_Inf
td_Inf = m.td_Sup
td_Sup = m.ld_Pas
ENDIF
lnAnios = YEAR(m.td_sup)-YEAR(m.td_Inf) - 1
lnMeses = 12 - MONTH(m.td_Inf) + MONTH(m.td_sup) - 1
IF m.lnMeses >= DAY(m.td_Sup)
lnMeses = m.lnMeses + 1
ENDIF
IF m.lnMeses >= 12
lnMeses = m.lnMeses - 12
lnAnios = m.lnAnios + 1
ENDIF
lnDias_Inf = DAY(m.td_Inf)
lnDias_Sup = DAY(m.td_sup)
IF m.lnDias_Inf = m.lnDias_Sup
lnDias = 0
ELSE
IF m.lnDias_Sup > m.lnDias_Inf
lnDias = m.lnDias_Sup - m.lnDias_Inf + 1
ELSE
lnMes_Calc = MONTH(m.td_sup)-1
lnAnio_Calc = YEAR(m.td_sup)
IF lnMes_Calc = 0
lnMes_Calc = 12
lnAnio_Calc = m.lnAnio_Calc - 1
ENDIF
lnDias = m.lnDias_Sup + DAY(GOMONTH(DATE(m.lnAnio_Calc,m.lnMes_Calc,1),1) - 1) - m.lnDias_Inf
ENDIF
ENDIF
*<Crear la Respuesta>
ADDPROPERTY(loREsp,"Str_Short", TRANSFORM(m.lnAnios)+" Año" + IIF(m.lnAnios>1,"s "," ");
+ TRANSFORM(m.lnMeses) +" Mes" + IIF(m.lnMeses>1,"es "," ") )
ADDPROPERTY(loREsp,"Str_ml", "<y>"+TRANSFORM(m.lnAnios)+"</y>";
+"<m>"+TRANSFORM(m.lnMeses)+"</m>";
+"<d>"+TRANSFORM(m.lnDias)+"</d>")
ADDPROPERTY(loResp,"Str_Large",TRANSFORM(m.lnAnios) + " Año" + IIF(m.lnAnios>1,"s "," ") ;
+ TRANSFORM(m.lnMeses) + " Mes" + IIF(m.lnMeses>1,"es "," ") ;
+ TRANSFORM(m.lnDias) + " Día" + IIF(m.lnDias>1,"s "," ") )
ADDPROPERTY(loREsp,"Birthday",DATE(YEAR(DATE()),MONTH(m.td_Inf),DAY(m.td_Inf)))
IF MONTH(m.td_Inf)=2 AND DAY(m.td_inf) = 29 AND EMPTY(loResp.BirthDay)
loResp.BirthDay = DATE(YEAR(DATE()),3,1)
ENDIF
ADDPROPERTY(loResp,"Anios",m.lnAnios)
ADDPROPERTY(loResp,"Meses",m.lnMeses)
ADDPROPERTY(loREsp,"Dias", m.lnDias)
*</Crear la Respuesta>
CATCH TO loex
loex.UserValue = PROGRAM()
* ShowError(loex) && rutina que muestra el error atrapado.
FINALLY
IF VARTYPE(loex) # "O"
loResp.Error = .f.
ENDIF
ENDTRY
REturn loResp
ENDPROC