none
Problema de Calculo en contador de dias entre 2 fechas cuando FechaInicial>FechaFinal RRS feed

  • Pregunta

  • Tengo esto segun formulario:

    Alguien dijo pero porque no pones 15 en fechaInici y 19 en fechaFin

    La respuesta es: que esa fecha es una entrega atrasada de laboratorio ya sea porque el cliente no a entrega todas las muestras a analizar o algun motivo pero se atrazo segun la fecha estimada por consiguiente entonces se coloca esa fecha para asi llevar un control de los dias de entrega los 2 primeros esta ok pero cuando FechaIni > FechaFin no calcula.

    Como hacer alguna validacion cuando tenga ese caso entonces sea ya habia probado colocar un if pero salio un problema error asi que borre todo. 

    Dim liDias As Integer = CInt(DateDiff("d", fechaFin, FechaClien))
    Private Sub CalcularDiasIEClie()
            Dim FechaClien As Date = CDate(txtFechaIEClie.Text)
            Dim fechaFin As Date = CDate(dtpEstimado.Value)
            Dim liDias As Integer = CInt(DateDiff("d", FechaClien, fechaFin))
            Dim ldtFecha As Date
            Dim liNumDias As Integer = 0
            '
            For liCiclo As Integer = 0 To liDias
                ldtFecha = DateAdd(DateInterval.Day, liCiclo, FechaClien)
                If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
                    Continue For
                End If
                If lF_bEsFestivo(ldtFecha) = True Then
                    Continue For
                End If
                liNumDias += 1
            Next
    
            'ObtenerValorDias
            txtDiasEnvioIEClie.Text = liNumDias.ToString - 1
        End Sub
    Private Function lF_bEsFestivo(ByVal vdFecha As Date) As Boolean
            Try
                Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                    Dim tb As New String("Select Count(*) From DiasFestivos Where Fecha=@FFestivos")
                    Dim cmdp As New SqlCommand(tb, cnx)
                    cmdp.Parameters.AddWithValue("@FFestivos", vdFecha)
                    cnx.Open()
                    Dim liResultado As Integer = CInt(cmdp.ExecuteScalar())
                    Return CBool(IIf(liResultado = 0, False, True))
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "lF_bEsFestivo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return True
        End Function

    Espero de su ayuda.

    Gracias

    domingo, 25 de marzo de 2018 22:47

Respuestas

  • Si hago esto condicion if sale pero positivo y tiene k ser -

    Private Sub CalcularDiasIEClie()
            Dim FechaClien As Date = CDate(txtFechaIEClie.Text)
            Dim fechaFin As Date = CDate(dtpEstimado.Value)
            If FechaClien < fechaFin Then
                Dim liDias As Integer = CInt(DateDiff("d", FechaClien, fechaFin))
                Dim ldtFecha As Date
                Dim liNumDias As Integer = 0
                '
                For liCiclo As Integer = 0 To liDias
                    ldtFecha = DateAdd(DateInterval.Day, liCiclo, FechaClien)
                    If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
                        Continue For
                    End If
                    If lF_bEsFestivo(ldtFecha) = True Then
                        Continue For
                    End If
                    liNumDias += 1
                Next
    
                'ObtenerValorDias
                txtDiasEnvioIEClie.Text = liNumDias.ToString - 1
    
            Else
                Dim liDias As Integer = CInt(DateDiff("d", fechaFin, FechaClien))
                Dim ldtFecha As Date
                Dim liNumDias As Integer = 0
                '
                For liCiclo As Integer = 0 To liDias
                    ldtFecha = DateAdd(DateInterval.Day, liCiclo, FechaClien)
                    If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
                        Continue For
                    End If
                    If lF_bEsFestivo(ldtFecha) = True Then
                        Continue For
                    End If
                    liNumDias += 1
                Next
    
                'ObtenerValorDias
               txtDiasEnvioIEClie.Text = (liNumDias.ToString - 1) * -1
            End If
    
        End Sub
    Es Correcto hacer eso ?

    • Marcado como respuesta Javier Roque lunes, 26 de marzo de 2018 18:19
    lunes, 26 de marzo de 2018 4:55

Todas las respuestas

  • Si hago esto condicion if sale pero positivo y tiene k ser -

    Private Sub CalcularDiasIEClie()
            Dim FechaClien As Date = CDate(txtFechaIEClie.Text)
            Dim fechaFin As Date = CDate(dtpEstimado.Value)
            If FechaClien < fechaFin Then
                Dim liDias As Integer = CInt(DateDiff("d", FechaClien, fechaFin))
                Dim ldtFecha As Date
                Dim liNumDias As Integer = 0
                '
                For liCiclo As Integer = 0 To liDias
                    ldtFecha = DateAdd(DateInterval.Day, liCiclo, FechaClien)
                    If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
                        Continue For
                    End If
                    If lF_bEsFestivo(ldtFecha) = True Then
                        Continue For
                    End If
                    liNumDias += 1
                Next
    
                'ObtenerValorDias
                txtDiasEnvioIEClie.Text = liNumDias.ToString - 1
    
            Else
                Dim liDias As Integer = CInt(DateDiff("d", fechaFin, FechaClien))
                Dim ldtFecha As Date
                Dim liNumDias As Integer = 0
                '
                For liCiclo As Integer = 0 To liDias
                    ldtFecha = DateAdd(DateInterval.Day, liCiclo, FechaClien)
                    If ldtFecha.DayOfWeek = DayOfWeek.Saturday Or ldtFecha.DayOfWeek = DayOfWeek.Sunday Then
                        Continue For
                    End If
                    If lF_bEsFestivo(ldtFecha) = True Then
                        Continue For
                    End If
                    liNumDias += 1
                Next
    
                'ObtenerValorDias
               txtDiasEnvioIEClie.Text = (liNumDias.ToString - 1) * -1
            End If
    
        End Sub
    Es Correcto hacer eso ?

    • Marcado como respuesta Javier Roque lunes, 26 de marzo de 2018 18:19
    lunes, 26 de marzo de 2018 4:55
  • en vez de usar 

    liNumDias += 1

    prueba a poner

     liNumDias -= 1
    txtDiasEnvioIEClie.Text = liNumDias.ToString 
    lunes, 26 de marzo de 2018 12:20
  • El resultado en el caso me sale -5 cuando es -4  aunque quizas ni deberia salir -4 sino -2 por eso de los sabd doming y feriados
    lunes, 26 de marzo de 2018 12:36