Foros del Web » Programando para Internet » PHP »

Consulta de fecha

Estas en el tema de Consulta de fecha en el foro de PHP en Foros del Web. Hola a todos. Estoy intentando hacer funcionar un archivo php con un cronjob que hace lo siguiente: A la fecha de hoy, le suma 20 ...
  #1 (permalink)  
Antiguo 11/05/2009, 15:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 15 años
Puntos: 0
Consulta de fecha

Hola a todos.

Estoy intentando hacer funcionar un archivo php con un cronjob que hace lo siguiente:

A la fecha de hoy, le suma 20 días y si en mi base de datos tengo algún registro que tenga la fecha de cumpleaños dentro de 20 días le envío un email automático.

Hice lo siguiente

$hoy = date ("Y-m-d");
$dias = 20;
$envio = date("m-d", strtotime("$hoy +$dias day"));

$sql4 = "SELECT * FROM hijos WHERE fecha = '$envio'";

Esto funciona bien para los que cumplen años dentro de 20 días pero sólo del año 2009 y yo necesito que funcione además para los que cumplen en años anteriores (sólo me importa el día y el més).

En la base de datos tengo un campo DATE 0000-00-00

Como tendría que hacer la consulta para que me funcione como necesito o que tengo que modificar.

Desde ya muchas gracias a todos

Saludos
  #2 (permalink)  
Antiguo 11/05/2009, 17:05
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: Consulta de fecha

Este tema es de bases de datos.

Para evaluar si la fecha de la base de datos está entre la del día de hoy y la fecha de hoy + 20 días podrías usar este SQL:

Código SQL:
Ver original
  1. SELECT *
  2. FROM hijos
  3. WHERE fecha BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 20 DAY);

Si querés usarlo en años anteriores, tenés que partir de una fecha que debés ingresar, y la situás en lugar del CURDATE() ambas veces, así lo tomás como punto de partida para calcular la fecha que cae si le sumás 20 días.

Saludos.
  #3 (permalink)  
Antiguo 11/05/2009, 17:35
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 15 años
Puntos: 0
Respuesta: Consulta de fecha

Hola Adolfiten. no se si es lo que estoy necesitando.

Te pongo un ejemplo de lo que necesito haber si se entiende mejor:

Tomando como fecha de partida hoy (2009-05-11) necesito que la consulta me devuelva todas las personas que cumplen años el 31 de mayo de cualquier año.

(En la bbdd si se guarda el dato 'año' con este formato DATE 0000-00-00 pero en este caso el dato 'año' no tiene importancia)

Como sería la consulta que tengo que realizar?

Muchas gracias

Pablo
  #4 (permalink)  
Antiguo 11/05/2009, 21:39
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: Consulta de fecha

Código Consulta SQL:
Ver original
  1. SELECT *
  2. FROM hijos
  3. WHERE fecha = DATE_ADD(CURDATE(), INTERVAL 20 DAY);

Esto siempre trae los campos de aquellos registros cuya fecha coincida con la fecha del día + 20 días.

Saludos.
  #5 (permalink)  
Antiguo 12/05/2009, 06:25
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 15 años
Puntos: 0
Respuesta: Consulta de fecha

Hola, que tal

Estuve probando la consulta que me enviaste pero solamente me devuelve los que cumplen años en el año 2009.

Ejemplo:
hoy 12-05-2009 me devuelve los que cumplen años el 01-06-2009

Lo de los 20 días los calcula bien

pero necesito hacer una consulta que al día de hoy, me traiga los que cumplen años el 01-06-2009, 01-06-2008, 01-06-2007, 01-06-2006 etc, etc.

Cómo debería hacer para hacer la consulta de esta forma?

Muchisimas gracias!!
  #6 (permalink)  
Antiguo 12/05/2009, 09:10
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 4 meses
Puntos: 7
Respuesta: Consulta de fecha

Ahora sí entiendo. Probá esto y decime si funciona...

Código Consulta SQL:
Ver original
  1. SELECT *
  2. FROM hijos
  3. WHERE DAY(fecha) = DAY(DATE_ADD(CURDATE(), INTERVAL 20 DAY))
  4. AND MONTH(fecha) = MONTH(DATE_ADD(CURDATE(), INTERVAL 20 DAY));

Saludos.
  #7 (permalink)  
Antiguo 12/05/2009, 09:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 14
Antigüedad: 15 años
Puntos: 0
Perdon, pero no llego a implementarlo

asi sería?

WHERE news_hijos.fecha = WHERE DAY = DAY(DATE_ADD(CURDATE(), INTERVAL 20 DAY)) AND MONTH = MONTH(DATE_ADD(CURDATE(), INTERVAL 20 DAY));

Sorry y muchisimas gracias!!

Hola

Ya pude solucionar el problema que tenía, para encontrar la solución me ayudo otro usuario que me indicó lo siguiente:

WHERE DATE_FORMAT( DATE_ADD( CURDATE(), INTERVAL 20 DAY ),'%m%d') = DATE_FORMAT(news_hijos.fecha, '%m%d');";

Igualmente Muchisimas gracias por tu tiempo y ayuda!!!

Te mando un saludo

Pablo

Última edición por GatorV; 12/05/2009 a las 12:49
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 08:51.