php obtener fecha -1 mes

3 minutos de lectura

avatar de usuario de gogu
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.

Avatar de usuario del experto quiero ser
Experto quiero ser

echo strtotime("-1 day"); //1332864156
echo date("y-m-d",strtotime("-1 day")); // 12-03-27

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

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

Avatar de usuario de SudarP
SudarP

Simplemente ;

    $WeekAgo = strtotime("-1 week"); //A week before today
    $MonthAgo = strtotime("-1 month"); //A month before today

avatar de usuario de haltabush
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');     

avatar de usuario de user1191247
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)

Avatar de usuario de Mikhail
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

¿Ha sido útil esta solución?