Principales respuestas
Como Comparar 2 fecha con formato

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) ThenAgradecido
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) ThenHola:
¿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.- Editado Enrique M. MontejoModerator lunes, 28 de mayo de 2018 21:48
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 30 de mayo de 2018 6:55
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) ThenHola:
¿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.- Editado Enrique M. MontejoModerator lunes, 28 de mayo de 2018 21:48
- Marcado como respuesta Enrique M. MontejoModerator miércoles, 30 de mayo de 2018 6:55
-
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
-
"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 ayudarPero, ¿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.