Delphi - Calcular Edad
Hola a todos Tengo un DBEdit1 y un DBEdit2 En el DBEdit1 almacena la fecha de nacimiento y debe introducirse con el siguiente formato. 05/15/1974, claro que la fecha puede variar. El DBEdit2 almacena la edad. Que es lo que quiero. Que cuando introduzca la fecha de nacimiento en el DBEdit1 automáticamente calcule la edad en el DBEdit2 Sé que el código va en el Evento OnExit del DBEdit1 y también se que la edad= fecha del sistema – fecha de nacimiento, pero no me sale. Por ejemplo si la fecha de nacimiento es: 15/08/1974, la edad es 38 Gracias por anticipadas También te puede interesar...
Recién estoy empezando con delphi y programación en general y no sé si está del todo bien, pero lo que se me ocurrió es esto: Primero, la fecha no se puede ingresar como 05/15/1974 (con las barras). Se tiene que ingresar el día en una variable, el mes en otra variable y el año en otra variable. Luego hay que priorizar las tres variables, la que tiene mayor prioridad va a ser la variable que guarda el año, después el mes y después el día. Después de que el usuario ingresa los 3 números (dia, mes, año) hay que sumarlos en una misma variable, en tu caso sería DBEdit1. Pero hay que llevarlos a un formato que mantenga la prioridad establecida con anterioridad y también permita realizar comparaciones (mayo que, menor que). Ese formato será AAAAMMDD (año, mes, dia). DBEdit1 := año*10000+mes*100+dia se multiplica al año por 10000 para guardar 4 lugares (que es la cantidad de 0 que tiene) los 4 lugares seran destinados 2 al mes y 2 al dia, y el mes se multiplica por 100 para guardar 00 para el dia. Ahora ya tenemos la fecha de nacimiento del usuario en un formato "manejable", pero el usuario no será consiente de este formato, por lo que no importa que no sea legible. Necesitaremos otra variable que contenga la fecha actual, esta variable puede ser constante (si el programa es para ejecutarlo en el día, guardará la fecha del día (AAAAMMDD), o sino puede ser una variable que guarde la fecha actual, no sé cuál es la función que actualiza la fecha. Ya tenemos dos variables: DBEdit1 que contiene la fecha de nacimiento del usuario y FECHA (por ejemplo) que contiene la fecha de hoy. Ahora necesitamos la diferencia de fechas (FECHA - DBEdit1) y guardamos esa operación en la variable ANIOS(por ejemplo). Esto se hace para calcular el tiempo que tiene el usuario de vida. Pero el formato será AAAAXXXX (XXXX no se sabe qué es) y necesitamos extraer el año de vida que tiene, por lo que DBEdit2:= ANIOS/10000 Te doy un ejemplo con mi edad 26/10/1991 → mi nacimiento 03/06/2012 → fecha actual DBEdit1 := 1991*10000+10*100+26 → 19911026 FECHA := 2012*10000+06*100+03 → 20120603 ANIOS := FECHA - DBEdit1 → 209577 DBEdit2 := ANIOS/10000 → 20,9577 y el entero es la edad en años que tengo.
Una aproximación mas sencilla puede ser simplemente restar las fechas, algo asi: FloatToStr((StrToDate(Edit2.Text)-StrToDate(Edit1.Text))/365)
Hola a todos. De la forma que explicó el amigo E.T., creo que es la forma más correcta pero me da un error. No sé si es que estoy poniendo algún paréntesis malo. Lo estoy haciendo en el evento OnExit del DBEdit2 DBEdit2.Text:= (DateToStr(Date)- FloatToStr(StrToDate(DBEdit1.Text))); DBEdit2= Fecha del sistema – fecha nacimiento Disculpen mi ignorancia, pero gracias por anticipadas.
Lo que estas haciendo es convertir la fecha del sistema en tipo string, luego le quieres restar otro string, los string no pueden ejecutar operaciones aritmeticas, por lo tanto deberia ser asi DBEdit2.Text:= floattostr((Date - StrToDate(DBEdit1.Text))/365);
Hola a todos: Las fechas la está restando bien pero en la edad salen demasiados números, debería salir el resultado redondeado. Por ejemplo DBEdit2.Text:= floattostr((Date - StrToDate(DBEdit1.Text))/365) DBEdit2= fecha del sistema – fecha de nacimiento (05/05/1974) Y sale como resultado DBEdit2= 38.112328767 y debería salir solamente 38.
Hay que aprender a usar la ayuda de delphi, y tampoco hace mal usar google, o tu buscador de preferencia DBEdit2.Text:= floattostr(trunc((Date - StrToDate(DBEdit1.Text))/365)); esto que te pongo no es redondeo, solo te pone la parte entera
Resuelto, Gracias problema con instalacion Ordenar los campos de un registro |