Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] controlar que no hayan pasado más de 5 días

Estas en el tema de controlar que no hayan pasado más de 5 días en el foro de PHP en Foros del Web. Hola!!! Supongo que para muchos de vosotros esta duda será un poco tonta...pero no doy con la solución. En mi base de datos tengo una ...
  #1 (permalink)  
Antiguo 30/06/2014, 05:13
emr
 
Fecha de Ingreso: mayo-2005
Mensajes: 13
Antigüedad: 18 años, 11 meses
Puntos: 0
controlar que no hayan pasado más de 5 días

Hola!!!


Supongo que para muchos de vosotros esta duda será un poco tonta...pero no doy con la solución.
En mi base de datos tengo una variable llamada FECHA, que almacena una fecha pero que es un varchar (aaaa-mm-dd) y no un date (cambiarlo me daría problemas)
Quiero controlar que si a día de hoy no han pasado más de 5 días desde esa fecha, la aplicación haga algo...pero no sé como hacerlo... (he probado con fecha-5...pero me da algo raro...)

Alguien me podría ayudar??

Gracias
  #2 (permalink)  
Antiguo 30/06/2014, 07:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: controlar que no hayan pasado más de 5 días

Podrías hacerlo utilizando la función date_diff, la cual resta dos fechas y devuelve la cantidad de días de diferencia entre una y otra.

Código PHP:
Ver original
  1. $fecha1 = new DateTime('2014-06-28'); //Fecha guardada
  2. $fecha2 = new DateTime(date('Y-m-d')); //Hoy
  3. $diferencia = $fecha1->diff($fecha2);
  4. echo $diferencia->format('%r%a días'); //2 días

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 30/06/2014, 11:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: controlar que no hayan pasado más de 5 días

Puedes hacer que el motor de DB te haga el calculo:

Código SQL:
Ver original
  1. SELECT ADDDATE(fecha, 5) AS fecha_incrementada FROM tabla


Y si fuera sobre la fecha actual:

Código SQL:
Ver original
  1. SELECT ADDDATE(CURDATE(), 5) AS fecha_incrementada FROM tabla


PD: me gusta mucho la clase DateTime que usó Alexis, solo que si viene de una consulta no vale la pena creo hacer eso.
__________________
Salu2!
  #4 (permalink)  
Antiguo 30/06/2014, 14:06
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: controlar que no hayan pasado más de 5 días

Buenas!!

pues las sugerencias que te pusieron los compañeros serian las mas acertadas salvo por un "pequeñito detalle"... lo estas manejando como varchar y no como date...
de que se puede se puede hacer pero te llevara mas codigo y mas logica para poder hacerlo...
tengo un caso similar y por eso te digo que se puede pero hay que pensarle mucho mas..

1.- tienes que hacer una descomposicion de las fechas guardadas, por año, mes y dia
2.- tienes que asignar a variables la fecha actual descompuesta tambien en dia, mes, año
3.- hacer las comparaciones de la primera con la segunda y comprobar si la diferencia es igual o menor de 5

ahora... ¿porque descompones dia, mes y año si solo quieres dias?

porque tienes que tomar en cuenta los dias finales de los meses por ejemplo 29 de marzo para el 3 de abril serian los 5 dias, el mismo caso con el año si te topas con el 29 de diciembre de 2013 para el 3 de enero de 2014

piensale y realiza tu codigo y a partir del que obtengas con mucho gusto te puedo ayudar porque ese es un tema que me dio quebradero de cabeza pero lo logre... Exitos!!!

Saludos!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #5 (permalink)  
Antiguo 30/06/2014, 14:12
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: controlar que no hayan pasado más de 5 días

Cita:
Iniciado por HalconVigia Ver Mensaje
Buenas!!

pues las sugerencias que te pusieron los compañeros serian las mas acertadas salvo por un "pequeñito detalle"... lo estas manejando como varchar y no como date...
Buen punto......es cuestion de hacer un CAST() antes de operar:


Código MySQL:
Ver original
  1. SELECT ADDDATE (CAST(fecha AS DATE) , 5) AS fecha_incrementada FROM tabla


Pero... lo mas importante......es un ERROR de diseño tener fechas en un campo VARCHAR, lo mejor seria arreglar eso y evitar mas complicaciones
__________________
Salu2!
  #6 (permalink)  
Antiguo 30/06/2014, 15:38
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: controlar que no hayan pasado más de 5 días

Buenas de nuevo!

Definitivamente Italico76, pero... me imagino que alguien ya habia hecho parte del codigo y hacer la transformacion de varchar a date cuando ya se armo toda una estructura basada en el varchar resulta mas facil hacer el codigo de manejo que hacer la transformacion de la celda, y que conste que no me refiero a cambiarle el formato porque eso es simple.. con dos clicks, pero todo lo que implica cuando ya hay una estrutura ya realizada...
bueno a mi me paso eso... asi que preferi hacer el script para convertir de varchar a fecha y comparar con campos nuevos ya puestos correctamente como DATE y hacer las comparaciones y calculos...
Saludos!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 30/06/2014, 21:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: controlar que no hayan pasado más de 5 días

Creo que con new DateTime('2014-06-28'), se soluciona el tema de si la fecha está guardada en formato varchar o no, ¿no creen?

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 01/07/2014, 01:18
emr
 
Fecha de Ingreso: mayo-2005
Mensajes: 13
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: controlar que no hayan pasado más de 5 días

Gracias por las aportaciones!! voy a probar y ahora les comento!!! :)
  #9 (permalink)  
Antiguo 01/07/2014, 03:37
emr
 
Fecha de Ingreso: mayo-2005
Mensajes: 13
Antigüedad: 18 años, 11 meses
Puntos: 0
Mensaje Respuesta: controlar que no hayan pasado más de 5 días

Pues...probé con la sentencia SQL que me dijisteis...pero me daba error...
También probé con el -> diff...pero también me daba error...así que decidí que tardaba menos en hacerlo "a lo bruto" que en comprobar y resolver esos errores!! jeje.

Aquí pongo mi solución, aunque es muy "rústica"...

$consulta1="SELECT * FROM parte";
$datos1=mysql_query($consulta1);
while($fila1=mysql_fetch_array($datos1))
{
$array= explode('-',$fila1[FECHA_CREACION]);
$a2=$array[0];
$m2=$array[1];
$d2=$array[2];

echo"<tr>";
echo"<td>";
if((($d-$d2)<=5)&&(($d-$d2)>=0)&&($m==$m2)&&($a==$a2))
{
echo"$fila1[FECHA_CREACION]";
}
else if($d<5)
{
if(($m!=1)&&($m==($m2+1))&&($a==$a2))
{
//dentro del mismo año
if(($m==2)||($m==4)||($m==6)||($m==8)||($m==9)||($ m==11))
{
//31 días
if(($d2-$d)>=26)
{
echo"$fila1[FECHA_CREACION]";
}
}
else
{
if(($m==3)&&(($d>=$d2)||(($d2-$d)>=23)))
{
//ojo bisiestos
echo"$fila1[FECHA_CREACION]";
}
else
{
if(($d2-$d)>=25)
{
echo"$fila1[FECHA_CREACION]";
}
}
}
}
else
{
//año distinto
if(($m==1)&&($m2==12)&&($a==($a2+1)))
{
if(($d2-$d)>=26)
{
echo"$fila1[FECHA_CREACION]";
}

}
}
}
echo"</td>";
echo"</tr>";
}



Aunque parezca mentira...al parecer funciona (excepto en años bisiestos....)

Etiquetas: controlar, fecha, variable
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 13:53.