none
DIferencia de Fechas??? Como lo hago ayuda porfavor!!! RRS feed

  • Pregunta

  • Muy buenas estimados miembros de la comunidad, nuevamente vengo con una incognita de la cual pido su ayuda

    Veran tengo que realizar una aplicacion que me calcule el tiempo exacto entre 2 fechas

    Por ejemplo:      Fecha1= 30/08/2012      Fecha2= 24/09/2012  Entre estas 2 fechas hay 26 dias de diferencia,  no un mes exacto, basicamente lo que trato es que al usar la funcion de     DateDiff(DateInterval.Month, Fecha1, Fecha2)   el resultado sea mas exacto, puesto que me dice que hay un mes de diferencia, quiero que al darse la fecha "30" de cada mes, se sume como un mes cumplino y no antes de eso

    Agradezco de antemano su ayuda y tiempo, pasen buen dia

    martes, 25 de septiembre de 2012 21:37

Respuestas

Todas las respuestas

  • Hola David:

                     Me parece que tu problema esta en el intervalo, ya que esta midiendo meses pero necesitas precicion de dias, por lo que deberias usar DateInterval.Days para conseguir medir un intervalo de dias entre las dos fechas y a partir del resultado relizar las tareas correspondientes.

    Saludos

    martes, 25 de septiembre de 2012 22:52
  • Hola amigo:

     el resultado sea mas exacto, puesto que me dice que hay un mes de diferencia, quiero que al darse la fecha "30" de cada mes, se sume como un mes cumplino y no antes de eso

    Esto te servirá, solo que no entiendo para que quieres sumarle 1 mes a una fecha cuando el día sea igual o superior a 30 si lo que obtendrás sera el día 30 0 31 del siguiente mes...Ademas ya pensaste en Febrero?

    Private Sub CalcularMes()
    
     Dim hora_inicio As New DateTime
            hora_inicio = dtpfechainicial.Value.Date 
            Dim hora_fin As New DateTime
            hora_fin = dtpfechafinal.Value.Date
    
            Dim t_transcurrido As TimeSpan = hora_fin.Subtract(hora_inicio)
    
            Dim dias As Int32 = t_transcurrido.Days
            If dias >= 30 Then
                Dim date_new As New DateTime
                date_new = Today
                date_new = date_new.AddMonths(1)
                MsgBox(date_new)
            End If
    End Sub

    Ahora, si lo que estas buscando es que al llegar el dia 30 de cada mes te salte automáticamente al dia 01 del siguiente mes, utiliza algo como esto:

    Private Sub CalcularMesSiguiente()
    
            Dim dateFecha As New Date
            Dim thisDay As Integer = DateAndTime.Day(dtpfechainicial.Value.Date)
            If thisDay = 30 Then
                Dim fecha1 As Date = DateAdd(DateInterval.Month, 1, dtpfechainicial.Value.Date)
                dateFecha = (DateAdd(DateInterval.Day, -1, DateSerial(fecha1.Year, fecha1.Month, 1)))
                dateFecha = dateFecha.AddDays(1)
            End If
    
            MsgBox(dateFecha)
    End Sub

    Si tienes alguna duda con la logica, con gusto te ayudo a disiparlas! :D


    Saludos desde Monterrey, N.L. México

    Luis Escobar :D


    • Editado JoséLuisGarcía miércoles, 26 de septiembre de 2012 6:19
    • Marcado como respuesta David Retreage miércoles, 26 de septiembre de 2012 19:53
    • Desmarcado como respuesta David Retreage miércoles, 26 de septiembre de 2012 20:26
    miércoles, 26 de septiembre de 2012 6:19
  • Gracias por tu respuesta Luis, mira tratare de explicarlo mejor...

    El programa calcula el pago de intereses de un prestamo, la fecha 30 es solo un ejemplo, puede ser 12, 17, 23, 29 cualquiera, el punto es que se recarge un mes cumplido al llegar a la fecha de pago y no antes..

    Lo que pasa es esto: el pago se realiza cada 23 de mes (ej: Febrero), por lo tanto, solo debe acreditarse como un mes completo o correcto cuando se llegue al 23 de mes siguiente (marzo, siguiendo el ejemplo anterior).

    Tengo un textbox que indica eso    >>>>     TempoInte.Text = DateDiff(DateInterval.Month, Fecha1, Fecha2)

    Cuando se alcanza el nuevo mes, aparece en el TextBox un 1, 2, 3 o el numero de meses que sea, ahora como dije esto no es tan exacto y quiero que sea mas exacto.

    Otro Ejemplo: Entre 15/02/2012 y 15/04/2012 hay 2 meses completos por lo tanto debe haber un numero "2" en el textbox; ahora, entre 15/02/2012 y 13/04/2012 solo hay un mes completo, por lo tanto debe haber un numero "1" en el textbox y no un "2", como me sucede.

    Cuando yo uso esta funcion DateDiff(DateInterval.Month, Fecha1, Fecha2) me marca asi, me urge la solucion, no encuentro que hacer, y la opcion de DateDiff(DateInterval.Day, no me es una opcion porque me cuenta los dias y en el textbox me apareceran el total de dias

    miércoles, 26 de septiembre de 2012 20:26
  • Muy buenas gente nuevamente los abordo para consultarles algo ambiguo, pero de lo que no logro salir....

    Como explique anteriormente nesecito calcular el tiempo entre meses de manera exacta; ejemplo: Fecha1= 23/08/2012 Fecha2= 17/09/2012 entre estas 2 fechas hay 26 dias de diferencia,  no un mes exacto, basicamente lo que trato es que al usar la funcion de TempoInte.Text=DateDiff(DateInterval.Month, Fecha1, Fecha2) el resultado sea mas exacto, puesto que me dice que hay un mes de diferencia, quiero que al darse la fecha "30" de cada mes, se sume como un mes cumplino y no antes de eso

    El programa calcula el pago de intereses de un prestamo, la fecha 30 es solo un ejemplo, puede ser 12, 17, 23, 29 cualquiera, el punto es que se recarge un mes cumplido al llegar a la fecha de pago y no antes..

    Lo que pasa es esto: el pago se realiza cada 23 de mes (ej: Febrero), por lo tanto, solo debe acreditarse como un mes completo o correcto cuando se llegue al 23 de mes siguiente (marzo, siguiendo el ejemplo anterior).

    Tengo un textbox que indica eso    >>>>     TempoInte.Text = DateDiff(DateInterval.Month, Fecha1, Fecha2)

    Cuando se alcanza el nuevo mes, aparece en el TextBox un 1, 2, 3 o el numero de meses que sea, ahora como dije esto no es tan exacto y quiero que sea mas exacto.

    Otro Ejemplo: Entre 15/02/2012 y 15/04/2012 hay 2 meses completos por lo tanto debe haber un numero "2" en el textbox; ahora, entre 15/02/2012 y 13/04/2012 solo hay un mes completo, por lo tanto debe haber un numero "1" en el textbox y no un "2", como me sucede.

    Cuando yo uso esta funcion DateDiff(DateInterval.Month, Fecha1, Fecha2) me marca asi, me urge la solucion, no encuentro que hacer, y la opcion de DateDiff(DateInterval.Day, no me es una opcion porque me cuenta los dias y en el textbox me apareceran el total de dias

    Nuevamente Mil gracias por su ayuda y tiempo

    miércoles, 26 de septiembre de 2012 20:36
  • hola

    analiza usar

    Dim starDT As DateTime = Convert.ToDateTime("01-Jul-2009 12:00:00 AM") Dim endDT As DateTime= Convert.ToDateTime("01-Nov-2009 12:00:00 AM") Dim monthDiff As Integer = System.Data.Linq.SqlClient.SqlMethods.DateDiffMonth(startDT, endDT);


    SqlMethods.DateDiffMonth Method

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de septiembre de 2012 21:02
  • Leandro Gracias por tu pronta respuesta

    mmm nada mas que no entiendo a que te refieres...

    Podrias esplicarme como usarlo en el contexto que tengo?

    TempoInte.Text = DateDiff(DateInterval.Month, Fecha1, Fecha2)

    miércoles, 26 de septiembre de 2012 22:01
  • ese es un metodo de linq el contexto es que le pasas dos fechas al metodo como ademas se ejemplifica  y obtienes los meses, no hay nada mas que eso, o sea es un metodo y dos parametros

    ojo necesitas .net 3.5 o superior, y referenciar a System.Data.Linq


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de septiembre de 2012 22:29
  • buenas noches, mira yo he usado este código y me a funcionado muy bien

    Public Function Calcular(ByVal FechaInicio As Date, ByVal FechaActual As Date) As String
            Dim Dias As Integer
            Dim Meses As Integer
            Dim Anios As Integer
            Dim diaActual As Integer = DatePart("d", FechaActual)
            Dim mesActual As Integer = DatePart("m", FechaActual)
            Dim anioActual As Integer = DatePart("yyyy", FechaActual)
            Dim diaInicio As Integer = DatePart("d", FechaInicio)
            Dim mesInicio As Integer = DatePart("m", FechaInicio)
            Dim anioInicio As Integer = DatePart("yyyy", FechaInicio)
            Dim B As Integer = 0
            Dim Mes As Integer = mesInicio - 1
            If (Mes = 2) Then
                If ((anioActual / 4 = 0 And anioActual / 100.0! = 0) Or anioActual / 400 = 0) Then
                    B = 29
                Else
                    B = 28
                End If
            ElseIf (Mes <= 7) Then
                If (Mes = 0) Then
                    B = 31
                ElseIf (Mes / 2 = 0) Then
                    B = 30
                Else
                    B = 31
                End If
            ElseIf (Mes > 7) Then
                If (Mes / 2 = 0) Then
                    B = 31
                Else
                    B = 30
                End If
            End If
    
            If ((anioInicio > anioActual) Or (anioInicio = anioActual And mesInicio > mesActual) Or (anioInicio = anioActual And mesInicio = mesActual And diaInicio > diaActual)) Then
                MsgBox("La fecha de inicio ha de ser anterior a la fecha Actual")
            Else
                If (mesInicio <= mesActual) Then
                    Anios = anioActual - anioInicio
                    If (diaInicio <= diaActual) Then
                        Meses = mesActual - mesInicio
                        Dias = diaActual - diaInicio
                    Else
                        If (mesActual = mesInicio) Then
                            Anios = Anios - 1
                        End If
                        Meses = (mesActual - mesInicio - 1 + 12) / 12
                        Dias = B - (diaInicio - diaActual)
                    End If
                Else
                    Anios = anioActual - anioInicio - 1
                    If (diaInicio > diaActual) Then
                        Meses = mesActual - mesInicio - 1 + 12
                        Dias = B - (diaInicio - diaActual)
                    Else
                        Meses = mesActual - mesInicio + 12
                        Dias = diaActual - diaInicio
                    End If
                End If
            End If
            Calcular = Anios & "/" & Meses & "/" & Dias
        End Function

    como veras si implementas esta función solo tienes que pasarle la fecha de inicio, la fecha actual y te devolverá un string con la cantidad de años, meses, días entre las dos fechas.

    espero sea de tu ayuda

    nota: el código no es de mi autoría, lo extraje de una web a la que visito frecuentemente.

    saludos

    miércoles, 26 de septiembre de 2012 23:14
  • Ya entiendo a lo que te refieres, pero igualmente me esta causando error, veras lo tengo declarado originalmente asi:

    Sub COUNTERMONTH()

    Dim FCH1, FCH2 As Date
            FCH1 = Date.Now
            FCH2 = TXDFecha.Text                                       Dim DIFERENCIA As Integer = DateDiff(DateInterval.Month, FCH2, FCH1)         TempoInte.Text = DIFERENCIA

    End Sub

    La verdad es que soy nuevo en esto y me cuesta... que mas puedo hacer???


    jueves, 27 de septiembre de 2012 0:45