none
Como Comparar 2 fecha con formato RRS feed

  • Pregunta

  • hago esta sentencia y no pasa, parece no tomar la pregunta IF.

    adaptador.Fill(registro, "Pagos_Pend")
                    Fechacomp1 = registro.Tables("Pagos_Pend").Rows(0).Item("Fecha_Mant")  '   Fecha Viene de la tabla
                    Fechacomp = Date.Now.ToString("MM/yyyy") '   Fecha Viene el sistema

                    If (Fechacomp1 < Fechacomp) Then

    Agradecido


    lunes, 28 de mayo de 2018 21:06

Respuestas

  • "El Fucho" escribió:

    > hago esta sentencia y no pasa, parece no tomar la pregunta IF.
    >
    >   Fechacomp1 = registro.Tables("Pagos_Pend").Rows(0).Item("Fecha_Mant")  '   Fecha Viene de la tabla
    >   Fechacomp = Date.Now.ToString("MM/yyyy") '   Fecha Viene el sistema
    >
    >   If (Fechacomp1 < Fechacomp) Then

    Hola:

    ¿Con qué tipo de dato has declarado las variables Fechacomp1 y Fechacomp? Si no las has declarado explícitamente con el tipo de dato DateTime, Fechacomp1 tendrá el tipo de dato Object y Fechacomp el tipo de dato String, por tanto, ¿cómo pretendes conocer si un valor Object es menor que un valor String? Es como si deseas comparar dos tipos de datos completamente distintos, un objeto DataTable y un objeto SqlConnection, por poner un ejemplo descabellado de comparación de valores. :-)

    Lo primero que te aconsejaría es que activaras la instrucción Option Strict (ver nota final del mensaje). Y si no deseas activar dicha instrucción, declara al menos las variables correctamente:

        ' Objeto DataTable
        Dim dt As DataTable = registro.Tables("Pagos_Pend")
    
        Try
            ' Nos quedamos sólo con la parte de la fecha (sin la hora) de las dos fechas.
            '
            Dim Fechacomp1 As DateTime = CDate(dt.Rows(0).Item("Fecha_Mant")).Date
            Dim Fechacomp As DateTime = Date.Now.Date
    
            If (Fechacomp1 < Fechacomp) Then
                MessageBox.Show("La primera fecha es menor que la fecha actual del sistema.")
            End If
    
        Catch ex As Exception
            MessageBox.Show(ex.Message)
    
        End Try

    ¿Qué tus fechas tienen un formato establecido? Entonces estaríamos hablando de valores alfanuméricos (String), aunque representen una fecha, por tanto, si deseas comparar los valores como fecha/hora, primero tendrás que convertir el valor String a DateTime, y después, utilizar el operador de comparación adecuado.

    > Fechacomp = Date.Now.ToString("MM/yyyy") '   Fecha Viene el sistema

    Te comento que ese formato NO ES UNA FECHA como tal, porque lo único que representa es un mes y el año, por ejemplo, "05/2018", si el código lo ejecutamos durante el mes de mayo, claro está. Si dicho valor alfanumérico lo conviertes a un valor DateTime válido, obtendrías el primer día del mes de mayo a las 0 horas del día:

    Dim fecha As DateTime = CDate(Fechacomp)
    
    ' fecha = #5/1/2018 12:00:00 AM#
    

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    lunes, 28 de mayo de 2018 21:39
    Moderador

Todas las respuestas

  • "El Fucho" escribió:

    > hago esta sentencia y no pasa, parece no tomar la pregunta IF.
    >
    >   Fechacomp1 = registro.Tables("Pagos_Pend").Rows(0).Item("Fecha_Mant")  '   Fecha Viene de la tabla
    >   Fechacomp = Date.Now.ToString("MM/yyyy") '   Fecha Viene el sistema
    >
    >   If (Fechacomp1 < Fechacomp) Then

    Hola:

    ¿Con qué tipo de dato has declarado las variables Fechacomp1 y Fechacomp? Si no las has declarado explícitamente con el tipo de dato DateTime, Fechacomp1 tendrá el tipo de dato Object y Fechacomp el tipo de dato String, por tanto, ¿cómo pretendes conocer si un valor Object es menor que un valor String? Es como si deseas comparar dos tipos de datos completamente distintos, un objeto DataTable y un objeto SqlConnection, por poner un ejemplo descabellado de comparación de valores. :-)

    Lo primero que te aconsejaría es que activaras la instrucción Option Strict (ver nota final del mensaje). Y si no deseas activar dicha instrucción, declara al menos las variables correctamente:

        ' Objeto DataTable
        Dim dt As DataTable = registro.Tables("Pagos_Pend")
    
        Try
            ' Nos quedamos sólo con la parte de la fecha (sin la hora) de las dos fechas.
            '
            Dim Fechacomp1 As DateTime = CDate(dt.Rows(0).Item("Fecha_Mant")).Date
            Dim Fechacomp As DateTime = Date.Now.Date
    
            If (Fechacomp1 < Fechacomp) Then
                MessageBox.Show("La primera fecha es menor que la fecha actual del sistema.")
            End If
    
        Catch ex As Exception
            MessageBox.Show(ex.Message)
    
        End Try

    ¿Qué tus fechas tienen un formato establecido? Entonces estaríamos hablando de valores alfanuméricos (String), aunque representen una fecha, por tanto, si deseas comparar los valores como fecha/hora, primero tendrás que convertir el valor String a DateTime, y después, utilizar el operador de comparación adecuado.

    > Fechacomp = Date.Now.ToString("MM/yyyy") '   Fecha Viene el sistema

    Te comento que ese formato NO ES UNA FECHA como tal, porque lo único que representa es un mes y el año, por ejemplo, "05/2018", si el código lo ejecutamos durante el mes de mayo, claro está. Si dicho valor alfanumérico lo conviertes a un valor DateTime válido, obtendrías el primer día del mes de mayo a las 0 horas del día:

    Dim fecha As DateTime = CDate(Fechacomp)
    
    ' fecha = #5/1/2018 12:00:00 AM#
    

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    lunes, 28 de mayo de 2018 21:39
    Moderador
  • disculpen, no me explique bien, tengo una fecha qué viene de una tabla la cual grabe como MM/yyyy y asi aparece en la tabla, ahora necesito comparar esa fecha con la fecha el dia, solo mes y año, tiene 2 variables creada como string.

    Dim Fechacomp As String

    Dim Fechacomp1 As String

    Fechacomp1 = registro.Tables("Pagos_Pend").Rows(0).Item("Fecha_Mant")  04/2018

    Fechacomp = Date.Now.ToString("MM/yyyy") 05/2018

    If Fechacomp1 < Fechacomp Then

    Espero me puedan ayudar

    Gracias

    lunes, 28 de mayo de 2018 23:14
  • "El Fucho" escribió:

    > tengo una fecha  qué viene  de una tabla la cual grabe como MM/yyyy y asi
    > aparece en la tabla, ahora necesito comparar esa fecha con la fecha el  dia,
    > solo mes y año, tiene 2 variables creada como  string.
    >
    > Espero me puedan ayudar

    Pero, ¿más quieres que te ayude? ¿Por casualidad has probado el ejemplo que te indiqué en mi respuesta anterior?

    En lugar de declarar las variables con el tipo de dato String, tan solo tienes que declararlas con el tipo de dato DateTime, si tu intención es comparar dichas fechas. Por supuesto, tendrás que hacer las conversiones de String a DateTime oportunas, porque está claro que con valores String pocos valores de fechas vas a poder comparar. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 29 de mayo de 2018 10:05
    Moderador