Php get date -1 месяц
Итак, вот ситуация. В моей таблице db у меня есть столбец с именем expire_date, где я помещаю определенную дату для каждой строки.
Так, например, срок действия 28-04-2012
Мне нужен php-код, который отправит определенному пользователю уведомление по электронной почте, что определенная вещь, которая истекает в эту дату, составляет 1 месяц с момента истечения срока действия. Так что если сегодня 28-03-2012, это означает, что до того, как эта вещь истечет, есть только 1 луна.
Я не сделал никакого кода для этого, потому что я не знаю, как решить -1 месяц.
Ответы
Ответ 1
Сначала введите дату в месяц с помощью php:
$myDate = date("Y-m-d", strtotime( date( "Y-m-d", strtotime( date("Y-m-d") ) ) . "+1 month" ) );
Затем вы можете выбрать:
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date BETWEEN NOW AND "' . $myDate . '"' );
И у вас есть массив со всеми элементами, срок действия которых истекает менее чем за один месяц.
Если вы хотите точно те, которые истекают через 1 месяц:
$result = mysql_query( 'SELECT * FROM myTable WHERE expire_date = "' . $myDate . '"' );
Я надеюсь, что это поможет
Ответ 2
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
Ответ 3
Просто
$WeekAgo = strtotime("-1 week"); //A week before today
$MonthAgo = strtotime("-1 month"); //A month before today
Ответ 4
Может быть, вы должны сделать это в SQL, а не PHP?
Если вы хотите сделать это на PHP, это более чистый способ, чем @Expert хотите быть
$date = new DateTime();//now
$interval = new DateInterval('P1M');// P[eriod] 1 M[onth]
$date->sub($interval);
echo $date->format('Y-m-d');
Ответ 5
Как указано @Mikhail, вы должны использовать =
, чтобы вы только извлекали запись один раз. Вы не хотите, чтобы спам ваших пользователей каждый день в течение всего месяца работал до expire_date -
SELECT *
FROM tbl
WHERE expire_date = CURRENT_DATE + INTERVAL 1 MONTH
Если ваш expire_date содержит DATETIME в отличие от значения DATE, вы должны использовать что-то вроде
SELECT *
FROM tbl
WHERE expire_date BETWEEN (CURRENT_DATE + INTERVAL 1 MONTH) AND (CURRENT_DATE + INTERVAL 1 MONTH + INTERVAL 1 DAY - INTERVAL 1 SECOND)
Ответ 6
SELECT user, email FROM tbl WHERE expire_date = CURRENT_TIMESTAMP - INTERVAL 1 MONTH
Обратите внимание, что я использую =
и не меньше, потому что, если вы просто сравниваете это менее одного месяца, вы будете отправлять по электронной почте пользователям каждый день в течение последнего месяца.
Ответ 7
Вы можете использовать функцию ADDDATE()
в вашем MySQL Query.
> SELECT ADDDATE( '28-03-2012', INTERVAL 1 MONTH )
28-04-2012
Подробнее об этом здесь.
Если у вас есть индекс в столбце expire_date
, это можно сделать довольно быстро, если вы запрашиваете записи с инструкцией WHERE
, например:
WHERE expire_date = ADDDATE(CURDATE(), INTERVAL 1 MONTH)
(Подробнее о CURDATE()
right здесь)
Если вы делаете это каждый день ровно один раз, он будет выбирать только всех людей в макс один раз и не отправлять им письмо дважды, так как он выбирает только те, которые находятся на расстоянии 1 месяца от даты истечения срока действия.
Конечно, это работает без дополнительной заботы о конкретном представлении дат, если вы используете тип DATE fieldtype в своей таблице MySQL.
Ответ 8
Вам, вероятно, понадобится включить вашу строку даты в unix-время, а затем сделать выбранный датифик. (Я предполагаю, что вы используете sql).
SELECT * FROM table WHERE (SELECT datediff(now(),your-date-in-unixtime) > 30)
Ответ 9
Как получить месяц назад в php
<?php
$d = strtotime("-1 Months");
echo date("Y-m-d h:i:sa", $d);
?>
Ответ 10
Я удивлен, что этот ответ здесь отсутствует:
$oneMonthAgo = new \DateTime('1 month ago');
echo $oneMonthAgo->format('Y-m-d');
Сегодня 2019-01-28
. Код выше выводит 2018-12-28
Здесь можно поиграть: http://sandbox.onlinephpfunctions.com/code/ad457f441719c6b9f68dc646445aac86a3f7f7a0
Ответ 11
Для SQL вы можете использовать следующий запрос
SELECT *
FROM tablename
WHERE DATE_FORMAT(created_at, '%Y/%m/%d') = (CURDATE() + INTERVAL 1 MONTH)