Como sacar la diferencia entre fechas. VB
Ahora bien, es posible que lo quieras más complejo y que te indique el número de años, meses y días transcurridos entre las dos fechas.
Pues bien, para ello añades una Label a la ventana (otros le llaman Formulario) y un módulo. Te pongo el módulo y después qué es lo que hay que poner en el Botón para ver el resultado en la label.
Module Module1
Function YearsMonthsDays(Date1 As Date, Date2 As Date, Optional ShowAll As _
Boolean = False, Optional Grammar As Boolean = True)
Dim TestYear As Long, TestMonth As Long, TestDay As Long
Dim TargetDate As Date, Last1 As Date, Last2 As Date
' Miramos que la fecha inicial no sea superior a la fecha final
If Date1 > Date2 Then
YearsMonthsDays = ""
Exit Function
End If
' miramos si el año coincide
If Date2.Year > Date1.Year Then
' Aquí los años no coinciden
' miramos si coincide el mes y en este caso si ha transcurrido un año completo
If Date2.Month = Date1.Month Then
If Date2.Day >= Date1.Day Then
TestYear = DateDiff("yyyy", Date1, Date2)
Else
TestYear = DateDiff("yyyy", Date1, Date2) - 1
End If
' Ha pasado un año
ElseIf Date2.Month > Date1.Month Then
TestYear = DateDiff("yyyy", Date1, Date2)
' No ha pasado un año
Else
TestYear = DateDiff("yyyy", Date1, Date2) - 1
End If
' El año de las dos fechas es el mismo
Else
TestYear = 0
End If
' Buscar meses completos una vez contados los años
TestMonth = (DateDiff("m", DateSerial(Date1.Year, Date1.Month, 1), DateSerial(Date2.Year, Date2.Month, 1)) + IIf(Date2.Day >= Date1.Day, 0, -1)) Mod 12
' Una vez que tenemos los meses miramos los días restantes
If Date2.Day >= Date1.Day Then
TestDay = Date2.day - Date1.day
' Si el día de la segunda fecha no es mayor, buscamos el fin de mes para contar días
Else
Last1 = DateSerial(Date2.Year, Date2.Month, 0)
Last2 = DateSerial(Date2.Year, Date2.Month + 1, 0)
TargetDate = DateSerial(Date2.Year, Date2.Month - 1, Date1.Day)
If Last2 = Date2 Then
If TestMonth = 11 Then
TestMonth = 0
TestYear = TestYear + 1
Else
TestMonth = TestMonth + 1
End If
Else
TestDay = DateDiff("d", IIf(TargetDate > Last1, Last1, TargetDate), Date2)
End If
End If
If ShowAll Or TestYear >= 1 Then
YearsMonthsDays = TestYear & IIf(TestYear = 1 And Grammar, " Año, ", _
" Años, ") & TestMonth & IIf(TestMonth = 1 And Grammar, " mes, ", _
" meses, ") & TestDay & IIf(TestDay = 1 And Grammar, " día", " días")
Else
If TestMonth >= 1 Then
YearsMonthsDays = TestMonth & IIf(TestMonth = 1 And Grammar, " mes, ", _
" meses, ") & TestDay & IIf(TestDay = 1 And Grammar, " día", " días")
Else
YearsMonthsDays = TestDay & IIf(TestDay = 1 And Grammar, " día", " días")
End If
End If
End Function
End Module
------------------------
Y en el click del botón:
Dim TiempoTranscurrido As String = YearsMonthsDays(DateTimePicker1.Value, DateTimePicker2.Value, False, True)
Label4.Text = TiempoTranscurrido
' Muchas personas necesitan esta manera de presentar los datos. Si, además, necesitas saber los días, sigues con el ejemplo anterior y tienes lo mejor de los dos mundos.