none
Calcular edad de una persona mostrando edad, meses y dias cumplidos en un control label.

    Pregunta

  • Hola amigos, alguna idea de como poder calcular  la edad de una persona junto a los meses y dias que ah cumplido, utilizando la fecha de nacimiento mostrada en un DateTimepIcker y la fecha actual del sistema.

    He implementado un codigo pero el resultado me da erroneo.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                Dim fecha1 As Date = (Me.DateTimePicker1.Value) 'Fecha de nacimiento
                Dim fecha2 As Date = Today 'Fecha actual del sistema
    
    
                If fecha2.Year < fecha1.Year Then
                    MessageBox.Show("El año de nacimiento debe ser menor al año actual")
                Else
                    Me.Label_Resultado.Text = "Su edad actual es: " & CStr(fecha2.Year - fecha1.Year) & " año(s) , " & CStr(fecha2.Month - fecha1.Month) & " mes(s) y " & CStr(fecha2.Day - fecha1.Day) & " dia(s)."
    
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error")
            End Try
        End Sub
    De antemano muchas gracias, saludos.

    lunes, 2 de enero de 2017 22:39

Respuestas

  • Hola:
    En un Form como el que muestras en la imagen, copia y pega el siguiente código

    Public Class Form1

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim ldtFecha1 As Date
            Dim ldtFecha2 As Date
            Dim ldtMesAnterior As Date
            Dim ldtMesSiguiente As Date
            Dim liDias As Integer
            Dim liMeses As Integer
            Dim liAños As Integer
            ldtFecha1 = Me.dtpActual.Value
            ldtMesAnterior = DateAdd("M", -1, ldtFecha1)
            ldtFecha2 = Me.dtpNacimiento.Value
            ldtMesSiguiente = DateAdd("M", 1, ldtFecha2)
            '
            liAños = DatePart("yyyy", ldtFecha1) - DatePart("yyyy", ldtFecha2)
            liMeses = DatePart("m", ldtFecha1) - DatePart("m", ldtFecha2)
            liDias = DatePart("d", ldtFecha1) - DatePart("d", ldtFecha2)
            Do While liDias < 0
                If liMeses = 0 Then
                    liDias += DateAndTime.Day(DateSerial(Year(ldtFecha1), Month(ldtFecha1) + 1, 0))
                Else
                    liDias += DateAndTime.Day(DateSerial(Year(ldtMesAnterior), Month(ldtMesAnterior) + 1, 0))
                End If
                liMeses -= 1
            Loop
            If liMeses < 0 Then
                liMeses += 12
                liAños -= 1
            End If
            lblResultado.Visible = True
            lblResultado.Text = "Tiempo: " & CStr(liAños) & " Años " & CStr(liMeses) & " Meses " & CStr(liDias) & " Dias"
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    miércoles, 4 de enero de 2017 5:54

Todas las respuestas

  • Hola Jose Alrey,

    Gracias por visitar los foros, según puedo observar el problema se encuentra en que tratas de restar como tal los números de tu fecha almacenados en una variable, por lo cual te arroja el error, sin embargo podrías intentar usando la función DateDiff que suele utilizarse, para determinar el número de intervalos de tiempo especificados que existen entre dos valores de fecha u hora.

    Saludos

    Joyce

    __________________________________________________________________________________________
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, hace que sea más fácil para los otros visitantes encontrar la solución  más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal  cual" y no implica ninguna responsabilidad de parte de Microsoft.


    martes, 3 de enero de 2017 23:21
    Moderador
  • Hola:
    En un Form como el que muestras en la imagen, copia y pega el siguiente código

    Public Class Form1

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim ldtFecha1 As Date
            Dim ldtFecha2 As Date
            Dim ldtMesAnterior As Date
            Dim ldtMesSiguiente As Date
            Dim liDias As Integer
            Dim liMeses As Integer
            Dim liAños As Integer
            ldtFecha1 = Me.dtpActual.Value
            ldtMesAnterior = DateAdd("M", -1, ldtFecha1)
            ldtFecha2 = Me.dtpNacimiento.Value
            ldtMesSiguiente = DateAdd("M", 1, ldtFecha2)
            '
            liAños = DatePart("yyyy", ldtFecha1) - DatePart("yyyy", ldtFecha2)
            liMeses = DatePart("m", ldtFecha1) - DatePart("m", ldtFecha2)
            liDias = DatePart("d", ldtFecha1) - DatePart("d", ldtFecha2)
            Do While liDias < 0
                If liMeses = 0 Then
                    liDias += DateAndTime.Day(DateSerial(Year(ldtFecha1), Month(ldtFecha1) + 1, 0))
                Else
                    liDias += DateAndTime.Day(DateSerial(Year(ldtMesAnterior), Month(ldtMesAnterior) + 1, 0))
                End If
                liMeses -= 1
            Loop
            If liMeses < 0 Then
                liMeses += 12
                liAños -= 1
            End If
            lblResultado.Visible = True
            lblResultado.Text = "Tiempo: " & CStr(liAños) & " Años " & CStr(liMeses) & " Meses " & CStr(liDias) & " Dias"
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    miércoles, 4 de enero de 2017 5:54
  • Muchas gracias por el aporte  J.Carlos Herrero, un saludo.
    viernes, 6 de enero de 2017 6:37