Foros del Web » Programando para Internet » ASP Clásico »

URGENTE: Comparación de fechas

Estas en el tema de URGENTE: Comparación de fechas en el foro de ASP Clásico en Foros del Web. Hola, a ver si me podeis ayudar que me estoy volviendo loca. Tengo en la base de datos una imagen que debe aparecer entre una ...
  #1 (permalink)  
Antiguo 19/07/2002, 03:52
 
Fecha de Ingreso: julio-2002
Mensajes: 4
Antigüedad: 21 años, 10 meses
Puntos: 0
URGENTE: Comparación de fechas

Hola, a ver si me podeis ayudar que me estoy volviendo loca.

Tengo en la base de datos una imagen que debe aparecer entre una fecha-inicio y una fecha-fin. Esta imagen se muestra hasta que finalice ese período. El usuario puede introducir mas imagenes pero tengo que controlar que el intervalo de fechas que introduzca no estén entre la imagen que se está mostrando en este momento. Yo he puesto esto (fechai y fechaf contienen la fecha que ha introducido el usuario):


if (Day(rs("fecha-inicio")) > Day(cDate(fechai)) and Month(rs("fecha-inicio")) >= Month(cDate(fechai)) and year(rs("fecha-inicio")) = year(cDate(fechai))) or (Day(rs("fecha-fin")) < Day(cDate(fechaf)) and Month(rs("fecha-fin")) <= Month(cDate(fechaf)) and year(rs("fecha-fin")) = year(cDate(fechaf))) then
response.redirect("mal.asp")

end if

Pero no me hace ni caso ya que existen muchos casos más. Me podriais decir como lo hariais vosotros.
Espero vuestras respuestas.

Muchas gracias.
  #2 (permalink)  
Antiguo 19/07/2002, 09:55
 
Fecha de Ingreso: abril-2002
Ubicación: La Comarca
Mensajes: 192
Antigüedad: 22 años, 2 meses
Puntos: 0
Re: URGENTE: Comparación de fechas


Mi solucion pasa por tratar las fechas como un campo numerico y no como fecha.

Si cada fecha que intoduces la conviertes de la siguiente manera :

fecha = "dd/mm/aaaa";

fecha_numerica = (aaaa x 10000) + (mm x 100) + dd; <- sera la que guardaria en la base de datos, tanto en el caso de inicial como final.

se garantiza que ningun numero de esa lista se repite y,a demas, solamente deberas comprobar lo siguiente :

( ((fecha_i_a > fecha_i_b) and (fecha_i_a < fecha_f_b)) or ((fecha_f_a > fecha_i_b) and (fecha_f_a < fecha_f_b)) )

Donde A es el elemento que introduce el usuario y B el elemento que seleccionas de la lista o base de datos donde tengas esa informacion.

Lo cierto es que esa comprobacion ya la introduciria en el select que ataca a la base de datos, de manera que no he de recorrer toda la base, sino que ya me diria la propia consulta si hay o no un caso que cumpla esas condiciones, por lo que sabria que no se pueden dar por validas y se redirigiria a la pagina 'mal.asp' que tu has puesto.

A veces las cosas son mas dificiles de explicar que de hacer, por lo que si despues de leer mis lineas te queda alguna consulta, no dudes en volver a preguntar o comentamos y te hago un ejemplo practico para tu caso.

Saludos y suerte.
Ideafix.
  #3 (permalink)  
Antiguo 19/07/2002, 09:57
 
Fecha de Ingreso: abril-2002
Ubicación: La Comarca
Mensajes: 192
Antigüedad: 22 años, 2 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

te pondre la linea esa como la habrias escrito tu para que entiendas lo que es cada elemento :

( ((fecha_i_a > rs("fecha-inicio")) and (fecha_i_a < rs("fecha-final"))) or ((fecha_f_a > rs("fecha-inicio")) and (fecha_f_a < rs("fecha-final"))) )

Espero que te ayude un poco mas a encontrar la solucion.

Suerte!!
Ideafix.
  #4 (permalink)  
Antiguo 19/07/2002, 10:26
 
Fecha de Ingreso: julio-2002
Mensajes: 4
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

Hola, muchas gracias por darme una idea. He cambiado los tipos de fecha-inicio y fecha-fin y los he puesto "numericos" pero es que ahora no me aclaro porque cuando los usuarios introducen las fechas y las envian a traves del formulario yo tengo que comprobar que es una fecha válida, es decir, que no pongan 30/02 porque febrero tiene como máximo 29 dias y yo hacia:

if NOT isDate(fechai) or NOT isDate(fechaf) then
response.redirect("malformato.asp")
end if

ahora no se como hacer esas comprobaciones y muchas más. El caso es que me funcionaba todo bien con el formato Fecha en la base de datos y lo unico que me faltaba para terminar este proyecto es la comparación de fechas que te explicaba antes. Tú no sabrias alguna forma de compararlas siendo el formato Fecha? Yo estaba utilizando la funcion DateDiff pero tampoco me aclaro muy bien.

Haber si me puedes ayudar. Gracias.
  #5 (permalink)  
Antiguo 19/07/2002, 10:35
 
Fecha de Ingreso: julio-2002
Mensajes: 4
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

Tú sabrias alguna función o forma para sacar la primera fecha del año? es decir, 01/01/2002 en este año 01/01/2003 para el año que viene... (para que me sirva para todos los años, que sea dinamico)

Es que como te decia estoy pensando en la funcion DateDiff que calcula el numero de dias entre una fecha y otra, entonces si hago:

if (DateDiff("d",rs("fecha-inicio"),cDate(fechai)) = 0 and DateDiff("d",rs("fecha-fin"),cDate(fechaf)) = 0) then

response.redirect("mal.asp")

end if

me comprueba que la fecha que ha introducido el usuario es igual a la que esta en la base de datos y por lo tanto da error porque solo se puede mostrar una imagen a la vez en un intervalo de fechas, pero claro ahora tengo que hacer todos los posibles casos y quería sacar la primera fecha del año para ir comparando cada una de las fechas y que contara los dias de diferencia y luego ver si estan en el intervalo.

Igual me estoy rayando mucho, pero es que llevo haciendo este proyecto con el formato fechas y es la primera vez que lo utilizo y también me gustaría aprenderlo.

Mira a ver si sabes hacer esto con el formato Fechas. Ojala me dieras alguna idea.

Muchas gracias por contestarme.
Un saludo. :)
  #6 (permalink)  
Antiguo 19/07/2002, 10:42
 
Fecha de Ingreso: enero-2002
Ubicación: Zaragoza
Mensajes: 144
Antigüedad: 22 años, 5 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

Para comparar si una determinada ficha está dentro de un rango es muy util between y su uso es el siguiente:

If fechax between fecha1 and fecha2 then ...

Espero que te sirva.

Nota: Si especificas un poco más el problema te podré ampliar la ayuda.

Saludos
  #7 (permalink)  
Antiguo 19/07/2002, 10:58
 
Fecha de Ingreso: julio-2002
Mensajes: 4
Antigüedad: 21 años, 10 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

Yo no hago la consulta en SQL porque compruebo que no este en el rango de la fecha que esta en la base de datos antes de subir la nueva imagen con sus fechas a la base de datos.
Mira hago:

Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set rs = Server.CreateObject ("ADODB.recordset")
rs.CursorType = 1
rs.LockType = 3
Sqltxt1="SELECT * FROM bannerBasico1 WHERE actual=true"
rs.open Sqltxt1, "DSN=Silvia"

De esta forma me quedo con el registro de la base de datos que tengo que comparar con el que me introduce el usuario. De esta forma ya solo me queda comparar rs("fecha-inicio") con fechai (que es la variable que contiene la fecha que ha introducido el usuario) y rs("fecha-fin") con fechaf. Pero no es tan facil, ya que existen pocas funciones de fechas o yo no las conozco. La unica que he encontrado es DateDiff que como te decia calcula la diferencia que existe entre fechas. Te puede contar el numero de años de diferencia, el numero de meses, el nº de dias...

Entonces hasta ahora he sacado solo:

if (DateDiff("d",rs("fecha-inicio"),cDate(fechai)) = 0 and DateDiff("d",rs("fecha-fin"),cDate(fechaf)) = 0)

response.redirect("mal.asp")
end if

Esto hace que si el nº de dias ("d") que hay entre rs("fecha-inicio") y fechai es =0, es que se trata de la misma fecha inicio entonces dará error y lo mismo con la fecha fin. Pero hay muchos casos mas...

Que dificil es esto!

:(
  #8 (permalink)  
Antiguo 22/07/2002, 11:38
Avatar de davidvamo  
Fecha de Ingreso: diciembre-2001
Ubicación: Barcelona '92
Mensajes: 106
Antigüedad: 22 años, 6 meses
Puntos: 0
Re: URGENTE: Comparación de fechas

Porqué no pruebas de meter las fechas en la base de datos con el siguiente formato: aaaammdd (año mes dia: 20021231). El campo será un char(8) o varchar(8), como te guste más y en el formulario de html al hacer el post / get, que te vendrá con la forma que tú hayas dado (dd/mm/aaaa ó dd/mm/aa, ...), reformateas la fecha en la página donde recoges todas las variables del formulario y comparas.

Espero haberte ayudado. :cantar:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:57.