none
Calcular Edad desde un DataTimePicker y mostrarlo en un Label

    Pregunta

  • Hola a todos

    Lo primero es dar las gracias anticipadamente y formular mi pregunta a los componentes de este foro.

    Tengo un proyecto con sus correspondientes Formularios. En citados Formularios tengo un DataTimePicker para que el usuario introduzca su fecha de nacimiento y en el momento tenga un label en el que pueda ver reflejada su edad en años.

    El problema principal es que estoy empezando en este mundillo del vb.net y no soy capaz de afinarlo para que me de las fechas correctamente.

    Un Saludo a todos y espero vuestras respuestas.

    sábado, 5 de noviembre de 2016 19:46

Respuestas

  • hola victor, lo primero que te recomendare es que no trabajes directamente con los eventos del dataTimePicker de manera directa, para que evites malos entendidos en el código, pues en un botón que podrías llamar "Calcular Edad" ahi si que podrías llamar el código para calcular la edad. la secuencia seria el usuario escoge la fecha de nacimiento, y luego le da al botón "Calcular Edad".

    lo primero que haremos es extraer el día y el mes de la fecha de nacimiento porque necesitaremos mas adelante preguntar si en el año actual la persona ya cumplió años o todavía no lo ha cumplido(por ejemplo si una persona nació en diciembre, todavía no ha cumplido años)

     Dim DiaNacimiento As Byte = dtp_fechaNacimiento.Value.Day
            Dim MesNacimiento As Byte = dtp_fechaNacimiento.Value.Month

    Ahora procedemos a calcular de manera bruta la cantidad de años que han pasado desde que la persona nacio.

     
    Dim años As Integer = DateDiff(DateInterval.Year, dtp_fechaNacimiento.Value, Date.Now)

    Y por ultimo preguntamos si la persona ya ha cumplido año o no:

     If Date.Now < DateSerial(Year(Date.Now), MesNacimiento, DiaNacimiento) Then
                años = años - 1
                lblEdad.Text = años
            Else
                lblEdad.Text = años
            End If

    estudia el código y para que veas como funciona, espero que te sirva.

    si te sirvió de respuesta, marca esta entrada como respuesta para que cierres la pregunta, gracias.


    Silvio Diaz

    • Marcado como respuesta Victor Sueiro domingo, 6 de noviembre de 2016 18:01
    domingo, 6 de noviembre de 2016 16:23

Todas las respuestas

  • Dim Edad As Integer = DateTime.Today.Year - DateTimePicker1.Value.Year
    If DateTimePicker1.Value > (DateTime.Today.AddYears(-Edad)) Then Edad -= 1
    sábado, 5 de noviembre de 2016 20:09
  • Hola Victor Sueiro,

    Puedes hacer algo como :

      Label1.Text = CStr(DateTime.Today.AddTicks(-dtpFNacimiento.Value.Ticks).Year - 1)


    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    sábado, 5 de noviembre de 2016 20:10
  • hola victor, lo primero que te recomendare es que no trabajes directamente con los eventos del dataTimePicker de manera directa, para que evites malos entendidos en el código, pues en un botón que podrías llamar "Calcular Edad" ahi si que podrías llamar el código para calcular la edad. la secuencia seria el usuario escoge la fecha de nacimiento, y luego le da al botón "Calcular Edad".

    lo primero que haremos es extraer el día y el mes de la fecha de nacimiento porque necesitaremos mas adelante preguntar si en el año actual la persona ya cumplió años o todavía no lo ha cumplido(por ejemplo si una persona nació en diciembre, todavía no ha cumplido años)

     Dim DiaNacimiento As Byte = dtp_fechaNacimiento.Value.Day
            Dim MesNacimiento As Byte = dtp_fechaNacimiento.Value.Month

    Ahora procedemos a calcular de manera bruta la cantidad de años que han pasado desde que la persona nacio.

     
    Dim años As Integer = DateDiff(DateInterval.Year, dtp_fechaNacimiento.Value, Date.Now)

    Y por ultimo preguntamos si la persona ya ha cumplido año o no:

     If Date.Now < DateSerial(Year(Date.Now), MesNacimiento, DiaNacimiento) Then
                años = años - 1
                lblEdad.Text = años
            Else
                lblEdad.Text = años
            End If

    estudia el código y para que veas como funciona, espero que te sirva.

    si te sirvió de respuesta, marca esta entrada como respuesta para que cierres la pregunta, gracias.


    Silvio Diaz

    • Marcado como respuesta Victor Sueiro domingo, 6 de noviembre de 2016 18:01
    domingo, 6 de noviembre de 2016 16:23
  • Me ha servido a la perfección. Lo he implementado con DTP_ValueChanged y devuelto el resultado a un label.

    Muchas gracias por la ayuda.

    domingo, 6 de noviembre de 2016 18:04