Foros del Web » Programando para Internet » PHP »

Contar 3 Meses a time()

Estas en el tema de Contar 3 Meses a time() en el foro de PHP en Foros del Web. Saludos, bueno para comensar les explico mi duda detalladamente y explicando para que es etc. Tengo una web en la cual un usuario sube un ...
  #1 (permalink)  
Antiguo 31/10/2008, 06:24
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Contar 3 Meses a time()

Saludos, bueno para comensar les explico mi duda detalladamente y explicando para que es etc.

Tengo una web en la cual un usuario sube un contenido tal (digamos una noticia) y quiero que esta noticia sea borrada 3 meses despues de la fecha que fue subida, entonces me preguntaba como puedo hacer para saber en cuanto tiempo es 3 meses despues para que borre dicha noticia la web.

No se si ponerlo en index.php ya que supongo me robara mas tiempo al cargar la pagina porque va a estar borrando todas las noticias que tienen 3 meses mas el time que tiene cada una, asi que mejor lo pongo en otra pagina.php no?

entonces seria...

Código PHP:
<?
$todo 
mysql_query("SELECT * FROM noticias");
while(
$todo mysql_fetch_array($todo)){

$id $todo['id'];
$todo2 $todo['fecha'];

if(
$todo2 >= "3 meses despues que no se como hacerlo" ){
mysql_query("DELETE FROM noticias WHERE id = $id);

}

?>
y listo supongo no? bueno si alguien me ayudaria con esto por favor y MCUHAS GRACIAS!
  #2 (permalink)  
Antiguo 31/10/2008, 10:10
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Contar 3 Meses a time()

Agrega un campo de fecha de vencimiento a la base de datos de las noticias.

Usas strtotime() para sumarle 3 meses a la fecha actual y darle formato para insertarla a la base de datos.
Y puedes:
1. Crear una funcion que corra la siguiente consulta:
//
"DELETE FROM noticias WHERE UNIX_TIMESTAMP(fecha_vencimiento) > '".time()."'";
Y llamar a dicha funcion en tu pagina de noticias (index.php)

Pero cada vez que visiten tu sitio estaria ejecutandose esa misma consulta, para lo cual haces lo siguiente:

2. Programas un Cronjob en Linux (Tareas Programadas en Windows), que corra digamos, 1 vez al dia y que ejecute un script con la consulta anterior.
  #3 (permalink)  
Antiguo 31/10/2008, 11:21
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

Gracias y podrias decirme como se usa ese comando?

strtotime()

para convertir 3 meses a eso?

seria:

<?
strtotime('3');
?>


asi?
  #4 (permalink)  
Antiguo 31/10/2008, 12:17
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Contar 3 Meses a time()

Código php:
Ver original
  1. strtotime('+3 month');

http://www.php.net/manual/en/function.strtotime.php

Entonces para calcular la fecha actual +3 meses seria:

Código php:
Ver original
  1. echo date('d-m-Y', strtotime('+3 month'));

Date cuenta que utilizo el 2do parametro de la funcion date, el cual tiene que ser el UNIX Timestamp que desees, en este caso el actual + 3 meses.
  #5 (permalink)  
Antiguo 31/10/2008, 12:22
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

Bien entonces para sumarle 3 meses a mi time que esta guardado en la base de datos, simplemente tengo que hacer:
Código PHP:
<?
$fechadb 
$db['fecha'];
$fechaultima strtotime('+3 month');
$fechaultima $fechadb $fechaultima;
$fecha_actual time();

if(
$fecha_actual >= $fechaultima){
borrar esto;
}
?>
  #6 (permalink)  
Antiguo 31/10/2008, 12:29
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Contar 3 Meses a time()

Es mas facil hacer un campo en la base de datos con la fecha de vencimiento, asi te ahorras mas tiempo y lo haces de una manera mas eficiente.

Solo tendrias que agregar 1 campo mas a la consulta del INSERT para que inserte el valor de la fecha de vencimiento.
INSERT INTO tabla (fecha_post, fecha_vencimiento) VALUES ('asfsdaof', 'asdasdasd')

Asi luego haces una funcion que haga un query como la siguiente:
"DELETE FROM noticias WHERE UNIX_TIMESTAMP(fecha_vencimiento) > '".time()."'";

Asi solamente tienes que ejecutar el query y se borran automaticamente los posts de mas de 3 meses.
Es mejor hacer 1 DELETE, que SELECT, procesar, DELETE
  #7 (permalink)  
Antiguo 31/10/2008, 12:32
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

ese campo fecha_vencimiento ya lo tiene solo que no se como hacer para que en el sql se ponga la fecha del vencimiento es decir si podria poner

time() + fecha_vencimiento = $fecha;

INSERT INTO noticias fecha_vencimiento='$fecha'; y listo pero es que no se como hacer la fecha exacta de vencimiento por eso quiero saberr calcularle 3 meses a la fecha time(); actual o del momento en que se publique, es lo unico que necesito.
  #8 (permalink)  
Antiguo 31/10/2008, 14:41
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Contar 3 Meses a time()

Entonces

$fecha = strtotime('+3 month');

Eso es todo.
  #9 (permalink)  
Antiguo 01/11/2008, 11:20
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

Ok si lo probe y me di cuenta que con solo poner strtotime mas 3 meses suma la fecha actual + los 3 meses sin poner time ni nada antes, asi que ya entendi correctamente como va.

Muchisimas gracias a todos los que me ayudaron en esto!
  #10 (permalink)  
Antiguo 01/11/2008, 12:35
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Contar 3 Meses a time()

Realizar tareas de mantenimiento de tus BB.DD. en las páginas que abren tus visitantes... es un error de bulto en cuanto a diseño, ¿no crees?

Deberías crearte una tarea programada (Cron, si tu server funciona en Linux) y si no sabes o no tienes acceso a esas funcionalidades, entonces, créate una página de administración de tu sitio con acceso restringido y entra en ella regularmente, o en el peor de los casos configura esta tarea para que sólo se lleve a cabo si tú te logeas a tu sitio web.

Porque, a poco que tengas unas cuántas visitas vas a ser la alegría de los dueños del hosting y de los que compartan servidor contigo :)

Aunque después de todo... ¿Qué problema hay en que guardes un histórico con todas las noticias? Si no quieres que aparezcan en el sitio... con filtrar según las fechas en las consultas a la BB.DD. ya evitarías mostrar noticias antiguas, sin necesidad de borrar continuamente.

Un saludo.
  #11 (permalink)  
Antiguo 02/11/2008, 10:01
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

Y para ponerle 3 meses mas a las fechas ya actualmente guardadas podria poner:

$time = $db['fecha'];

$time = strtotime('$time', '+3 month');


asi?
  #12 (permalink)  
Antiguo 02/11/2008, 13:49
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Contar 3 Meses a time()

Ya te han respondido antes.

Aunque en mi opinión, no necesitas ninguna fecha de vencimiento. Sólo guardar la fecha de publicación de la noticia, y cuando hagas el SELECT para pillar los registros que interese, filtrar con algo del estilo de "WHERE fecha > strtotime('-3 month')" (ojo que sólo es un ejemplo, eso no funciona literalmente así).

Más info de strtotime aquí

Y si quieres "limpiar" la base de datos (aunque insisto en que no veo la razón a menos que tengas miles de noticias), conque entres de vez en cuando y purgues las que tienen mucho tiempo (eso ya lo decides tú), sería suficiente.

Un saludo.
  #13 (permalink)  
Antiguo 03/11/2008, 07:36
Avatar de TxT
TxT
 
Fecha de Ingreso: junio-2008
Ubicación: Canada
Mensajes: 272
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Contar 3 Meses a time()

Si pero como dije al principio eso de noticias era un ejemplo.
Bueno y ya con eso que he entendido hasta la fecha me las arreglare, gracias a todos por su ayuda ;)
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 16:55.