Como calcular la cantidad de meses y días entre un Rango de Fechas.
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)
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)
'Cantidad de Días
Dim F3 As TimeSpan, nf1 As Date, nf2 As Date
F3 = f2.Subtract(f1)
'Cantidad de Meses
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
If Dias < 0 Then
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 Integer
Calcular(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