Foros del Web » Programando para Internet » ASP Clásico »

Calcular la edad de una persona.

Estas en el tema de Calcular la edad de una persona. en el foro de ASP Clásico en Foros del Web. Hola. Tengo el siguiente problema, en una base de datos almaceno la fecha de nacimiento de la siguiente forma dd/mm/yyyy El problema radica al momento ...
  #1 (permalink)  
Antiguo 25/04/2005, 09:33
 
Fecha de Ingreso: mayo-2004
Mensajes: 183
Antigüedad: 20 años
Puntos: 0
Calcular la edad de una persona.

Hola.
Tengo el siguiente problema, en una base de datos almaceno la fecha de nacimiento de la siguiente forma

dd/mm/yyyy

El problema radica al momento de calcular la edad. Utilizo el siguiente codigo:

date1 = Now() '25/04/2005
date2 = "14/06/1980" 'la fecha de nacimiento
strDateDiff = DateDiff("YYYY" , date2 , date1 )
Response.Write(strDateDiff) 'Aqui muestro la edad

Al momento de mostrar la edad, aparece 25 años, siendo que es 24. ¿Que puedo hacer?

Saludos.
  #2 (permalink)  
Antiguo 25/04/2005, 09:46
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
conchaleco!
que raro... te dejo un comentarios por mientras para que lo leas y puedas ver que onda.

yo por mi parte hare algunas pruebas


Cita:
Puede utilizar la función DateDiff para determinar cuántos intervalos de tiempo especificados existen entre dos fechas. por ejemplo, podría utilizar DateDiff para calcular el número de días entre dos fechas o el número de semanas entre hoy y el final del año.

Para calcular el número de días entre fecha1 y fecha2, puede utilizar Día del año ("y") o Día ("d"). Cuando el intervalo es Día de la semana ("w"), DateDiff devuelve el número de semanas entre las dos fechas. Si fecha1 es un lunes, DateDiff cuenta el número de lunes hasta fecha2. Cuenta fecha2 pero no fecha1. Si intervalo es Semana ("ww"), sin embargo, la función DateDiff devuelve el número de semanas del calendario entre dos fechas. Cuenta el número de domingos entre fecha1 y fecha2. DateDiff cuenta fecha2 si es un domingo; pero no cuenta fecha1, aunque sea un domingo.

Si fecha1 hace referencia a un punto en el tiempo posterior a fecha2, la función DateDiff devuelve un número negativo.

El argumento primerdíadelasemana afecta a los cálculos que utilizan los símbolos de intervalo "w" y "ww".

Si fecha1 o fecha2 es un literal de fecha, el año especificado se convierte en parte permanente de dicha fecha. Sin embargo, si fecha1 o fecha2 está entre comillas (" ") y se omite el año, el año actual se inserta en el código cada vez que se evalúa la expresión fecha1 o fecha2. Esto hace que sea posible escribir el código que se puede utilizar en años diferentes.

Cuando se compara el 31 de diciembre con el 1 de enero del año inmediatamente siguiente, DateDiff para Año ("yyyy") devuelve 1 incluso aunque sólo haya pasado un día.
  #3 (permalink)  
Antiguo 25/04/2005, 10:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 183
Antigüedad: 20 años
Puntos: 0
Muchas Gracias, Muzztein, por tu respuesta.
Ya encontre el codigo que soluciona mi problema.

date1 = Now()
date2 = "14/06/1980"
Yr = DateDiff("YYYY" , date2 , date1)
Mt = DateDiff("m" , date2 , date1)
if Mt < 12*Yr then Yr = Yr - 1
Response.Write("Año: " & Yr)
  #4 (permalink)  
Antiguo 25/04/2005, 10:19
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
okis... es error de la funcion.

date1 = cdate("25/04/2005")
date2 = cdate("15/10/1976")
strDateDiff = DateDiff("yyyy" , date2 , date1 )

da 29 y yo tengo 28 años.

Eso quiere decir que el calculo lo genera obviando completamente el mes y el dia..lo cual esta malo.

sin embargo

date1 = cdate("25/04/2005")
date2 = cdate("15/10/1976")
strDateDiff = DateDiff("d" , date2 , date1 )

da 10419 dias, dividio por 365,25 (la cantidad exacta de dias por año) te da 28.5256 años... y si a esto le sacas la parte entera, te quedara 28 años.

lo cual estaria correcto.


suerte
  #5 (permalink)  
Antiguo 25/04/2005, 10:19
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
uf........
  #6 (permalink)  
Antiguo 25/04/2005, 10:36
 
Fecha de Ingreso: mayo-2004
Mensajes: 183
Antigüedad: 20 años
Puntos: 0
Tienes muchas razon, Muzztein, me gusta mas la forma en que calculas la edad.

Ahorita estoy buscando como redondear, por que es la parte que me esta costando trabajo.

Gracias.
  #7 (permalink)  
Antiguo 25/04/2005, 11:58
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 21 años, 9 meses
Puntos: 16
te presento estas funciones

Cita:
Funciones Int y Fix
Devuelve la parte entera de un número.

Int(número)

Fix(número)

El argumento número puede ser cualquier expresión numérica válida. Si número contiene Null, se devuelve Null.

Comentarios
Int y Fix eliminan la parte fraccional de número y devuelven el valor de número entero resultante.

La diferencia entre Int y Fix es que si número es negativo, Int devuelve el primer número entero negativo menor o igual que número, mientras que Fix devuelve el primer número entero negativo mayor o igual que número. Por ejemplo, Int convierte -8,4 en -9 y Fix convierte -8,4 en -8.

Fix(número) es equivalente a:

Sgn(número) * Int(Abs(número))

Los siguientes ejemplos ilustran la forma en que las funciones Int y Fix devuelven partes enteras de números:

MiNumero = Int(99,8) ' Devuelve 99.
MiNumero = Fix(99,2) ' Devuelve 99.
MiNumero = Int(-99,8) ' Devuelve -100.
MiNumero = Fix(-99,8) ' Devuelve -99.
MiNumero = Int(-99,2) ' Devuelve -100.
MiNumero = Fix(-99,2) ' Devuelve -99.
  #8 (permalink)  
Antiguo 25/04/2005, 12:06
Avatar de Saruman  
Fecha de Ingreso: mayo-2003
Ubicación: Panama city, Panama, Panama
Mensajes: 1.154
Antigüedad: 21 años
Puntos: 5
hola, esta función la hice hace tiempo.,...

espero q t sirve...

Código:
Function Age(strBirthDate)
		If IsNull(strBirthDate) then Age = 0: Exit Function
	
		varAge = DateDiff("yyyy", strBirthDate, Now)
		If Date < DateSerial(Year(Now), Month(strBirthDate), Day(strBirthDate)) Then
			varAge = varAge - 1
		End If
		Age = CInt(varAge)
	End Function
__________________
Saruman

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them.
  #9 (permalink)  
Antiguo 26/04/2005, 09:17
 
Fecha de Ingreso: mayo-2004
Mensajes: 183
Antigüedad: 20 años
Puntos: 0
Gracias por sus respuestas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:44.