gogu
Entonces, esta es la situación. En mi tabla db tengo una columna llamada expire_date, donde pongo una fecha determinada para cada fila. Entonces, por ejemplo, la fecha de vencimiento es 28-04-2012
Necesito un código php que le envíe a un determinado usuario un aviso por correo electrónico de que lo que caduca en esa fecha está a 1 mes de caducar. Entonces, si hoy es 28-03-2012, eso significa que solo falta 1 mes antes de que caduque. No hice ningún código para esto porque no sé cómo resolver el -1 mes.
Experto quiero ser
echo strtotime("-1 day"); //1332864156
echo date("y-m-d",strtotime("-1 day")); // 12-03-27
Primero obtenga la fecha en un mes con php:
$myDate = date("Y-m-d", strtotime( date( "Y-m-d", strtotime( date("Y-m-d") ) ) . "+1 month" ) );
Entonces puedes hacer una selección:
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date BETWEEN NOW AND "' . $myDate . '"' );
Y ahí tienes un array con todos los artículos que caducan en menos de un mes. Si quieres exactamente las que caducan en 1 mes:
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date = "' . $myDate . '"' );
espero que esto ayude
-
@Tales, en realidad debería poder obtener la misma fecha usando 1 función de fecha menos () como:
date('Y-m-d', strtotime(date('Y-m-d') . ' +1 month'));
– AlgoSimple
15 de julio de 2015 a las 14:59
-
@Tales En realidad, supongo que solo
echo date('Y-m-d', strtotime('+1 month'));
¿bien?– AlgoSimple
15 de julio de 2015 a las 15:15
Me sorprende que falte esta respuesta aquí:
$oneMonthAgo = new \DateTime('1 month ago');
echo $oneMonthAgo->format('Y-m-d');
Hoy es 2019-01-28
. El código anterior produce 2018-12-28
Aquí está en vivo para jugar con: http://sandbox.onlinephpfunctions.com/code/ad457f441719c6b9f68dc646445aac86a3f7f7a0
-
Gracias John, esta es la mejor respuesta en mi opinión.
– mholubowski
7 mayo 2020 a las 19:25
SudarP
Simplemente ;
$WeekAgo = strtotime("-1 week"); //A week before today
$MonthAgo = strtotime("-1 month"); //A month before today
halcón
Tal vez deberías hacer eso en SQL en lugar de PHP, ¿no?
Si quiere hacerlo en PHP, aquí hay una forma más limpia de lo que @Expert quiere ser
$date = new DateTime();//now
$interval = new DateInterval('P1M');// P[eriod] 1 M[onth]
$date->sub($interval);
echo $date->format('Y-m-d');
usuario1191247
Como señaló @Mikhail, debes usar =
para que solo recupere el registro una vez. No querrá enviar spam a sus usuarios todos los días durante todo el mes hasta la fecha de caducidad:
SELECT *
FROM tbl
WHERE expire_date = CURRENT_DATE + INTERVAL 1 MONTH
Si su expire_date contiene un DATETIME en lugar de un valor de FECHA, debe usar algo como:
SELECT *
FROM tbl
WHERE expire_date BETWEEN (CURRENT_DATE + INTERVAL 1 MONTH) AND (CURRENT_DATE + INTERVAL 1 MONTH + INTERVAL 1 DAY - INTERVAL 1 SECOND)
Mijaíl
SELECT user, email FROM tbl WHERE expire_date = CURRENT_TIMESTAMP - INTERVAL 1 MONTH
Fíjate que uso =
y no menos de, porque si solo comparas que es menos de un mes, estarás enviando correos electrónicos a los usuarios todos los días durante el último mes.
-
Esto selecciona los registros que vencieron hace un mes.
– Alex Howansky
28 de marzo de 2012 a las 16:05