Visual Basic - calcular edad en años, meses y días

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 3
Ha aumentado su posición en 10 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

calcular edad en años, meses y días

Publicado por guillermo arias (10 intervenciones) el 16/02/2007 05:45:05
Estuve tratando de calcular la edad de alguien en años, meses y días pero no me resultaba, bajé varias rutinas de otros programadores y tenían errores, así que les presento una rutina que creo que no tiene fallas. Ojalá les sirva.

*********************************************
clea
tdBirth = {^2006/12/2} -1 && fecha de nacimiento, no olvidar el -1, es importante
tdTarget= {^2007/02/8} && fecha de comparación

Years = 0
Months = 0
Days = 0

Local ldTemp, ldBirth, lnDrop
tdTarget = Iif(Empty(m.tdTarget), Date(), m.tdTarget)
If m.tdBirth > m.tdTarget
ldTemp = m.tdTarget
tdTarget = m.tdBirth
tdBirth = m.ldTemp
Endif

ldBirth = Date(Year(m.tdTarget),Month(m.tdBirth),Day(m.tdBirth))
lnDrop = 0
If Empty(m.ldBirth) && leap case
ldBirth = Date(Year(m.tdTarget),3,1)
lnDrop = Iif(Month(m.tdTarget)<=2,0,1)
Endif

Years = Year(m.tdTarget) - Year(m.tdBirth) - (Iif(m.ldBirth > m.tdTarget,1,0))
Months = (Month(m.tdTarget) - Month(m.tdBirth) + 12 - (Iif(Day(m.tdBirth)>Day(m.tdTarget),1,0)))%12
ldTemp = Date( Year(m.tdBirth) + Years, Month(m.tdBirth), Day(m.tdBirth) )

If Empty(ldTemp)
ldTemp = Date( Year(m.tdBirth) + Years, Month(m.tdBirth), Day(m.tdBirth-1) )
Endif
Days = m.tdTarget - Gomonth(m.ldTemp,Months) - m.lnDrop

* correción de errores

DO case
CASE INLIST(MONTH(tdTarget),1,3,5,7,8,10,12)
IF Days= 31
Days=0
Months= Months +1
IF Months = 12
Months= 0
Years= Years +1
ENDIF
ENDIF
CASE INLIST(MONTH(tdTarget),4,6,9,11)
IF Days= 30
Days=0
Months= Months +1
IF Months = 12
Months= 0
Years= Years +1
ENDIF
ENDIF
OTHERWISE
lAñoBis = (MOD(YEAR(tdTarget),4)=0 AND MOD(YEAR(tdTarget),100)<>0) OR MOD(YEAR(tdTarget),400)=0
IF Days= IIF(lAñoBis,29,28)
Days=0
Months= Months +1
IF Months = 12
Months= 0
Years= Years +1
ENDIF
ENDIF
ENDCASE

?years,months,days
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder