La pregunta parece bastante simple… utilicemos un DateDiff, pero DateDiff solo entrega la Cantidad de meses entre ese Rango y en forma separada te entrega la cantidad de días entre ese rango de fechas. Pero no devuelve ambas al mismo tiempo.
Por ejemplo:
20/04/2006
25/05/2006
Debería dar 1 Mes y 5 días.
A continuación adjunto 2 pequeños programas uno que fue creado por un amigo Colombiano Jorge Mario Restrepo y el otro por mi, ambos dan el mismo resultado.
Dim TotalMes As Long
Dim TotalDia As Long
Dim TotalFec As Date
TotalMes = DateDiff(DateInterval.Month, dt1.Value, dt2.Value)
If Day(dt1.Value) > Day(dt2.Value) Then
TotalMes = TotalMes – 1
End If
TotalFec = DateAdd(DateInterval.Month, TotalMes, dt1.Value)
TotalDia = DateDiff(DateInterval.Day, TotalFec, dt2.Value)
MsgBox(“Meses :” & TotalMes & ” Dias :” & TotalDia)
Dim TotalDia As Long
Dim TotalFec As Date
TotalMes = DateDiff(DateInterval.Month, dt1.Value, dt2.Value)
If Day(dt1.Value) > Day(dt2.Value) Then
TotalMes = TotalMes – 1
End If
TotalFec = DateAdd(DateInterval.Month, TotalMes, dt1.Value)
TotalDia = DateDiff(DateInterval.Day, TotalFec, dt2.Value)
MsgBox(“Meses :” & TotalMes & ” Dias :” & TotalDia)
Y este otro lo puse, ya que me costó bastante me fui por otro camino, pero llegamos al mismo resultado.
Sub Calcular(ByVal f1 As Date, _
ByVal f2 As Date, _
ByRef Meses As Long, _
ByRef Dias As Long)
ByVal f2 As Date, _
ByRef Meses As Long, _
ByRef Dias As Long)
‘Cantidad de Días
Dim F3 As TimeSpan, nf1 As Date, nf2 As Date
Dim F3 As TimeSpan, nf1 As Date, nf2 As Date
F3 = f2.Subtract(f1)
‘Cantidad de Meses
Meses = DateDiff(DateInterval.Month, f1, f2)
Meses = DateDiff(DateInterval.Month, f1, f2)
nf1 = CDate(f1.ToString(“01/MM/yyyy”))
nf2 = DateAdd(DateInterval.Day, -1, CDate(f2.ToString(“01/MM/yyyy”)))
Meses = DateDiff(DateInterval.Month, nf1, nf2)
Dias = F3.Days – DateDiff(DateInterval.Day, nf1, nf2) + -1
Dias = F3.Days – DateDiff(DateInterval.Day, nf1, nf2) + -1
If Dias < 0 Then
Dias = Dias + DateAdd(DateInterval.Month, 1, nf2).Day + 1
End If
Dias = Dias + DateAdd(DateInterval.Month, 1, nf2).Day + 1
End If
End Sub
Y para llamar a la rutina anterior.
Dim Meses As Integer, _
Dias
As IntegerCalcular(d1.Value, d2.Value, Meses, Dias)
MsgBox(
“Meses: “ & Meses & ” Días:” & Dias)Por si alguien en algún momento le toca encontrar algo parecido.. espero les sirva.
Saludos,
Jhonny Vargas
Y que pasa con dt1 y dt2 o bien d1 y d2, que tipo de variables son y van declaradas en una funcion o donde porque no seeee. sorry, mi ignorancia, pero estoy empezando en esto
la idea es que salga tantos años y meses dias transcurridos entre una y otra fecha, pero que no sea el total de totales:
ejemlo: 3 años y 2 mese y 5 dias ; algo asi
Saludos,
Quisiera q un texbox mientras se valla escribiendo le ponga el punto de mil y de decimal en vb.net 2005
Que tipo de variables son dt1 y dt2
Ambos ejemplos están incorrectos….
Estoy elaborando un sistema de Planilla y necesito esto mismo para conocer el tiempo laborado de un empleado. Utilicé tus dos ejemplos y cuando alguien incia el 29 de x mes , calcula mal todo porque no consideran los años bisiestos.
Perdón si está bien !!!
Es que lo estoy pasando a VB6 y cometí un error en una línea.
Muchas Gracias, Perfecto.
Gracia me sirvió.
Saludos
dan muchas vuelas para un simple programa