情况就是这样。在我的db表中,我有一个名为expire_date的列,其中我为每一行设置了一个特定的日期。 例如,过期日期是28-04-2012
我需要一个PHP代码,它会通过电子邮件向某个用户发送通知,告知该日期到期的特定内容是到期后的1个月。因此,如果今天是28-03-2012,这意味着在该事件到期之前只有1个月亮。 我没有为此制作任何代码,因为我不知道如何解决-1个月。
答案 0 :(得分:24)
echo strtotime("-1 day"); //1332864156
echo date("y-m-d",strtotime("-1 day")); // 12-03-27
答案 1 :(得分:18)
首先使用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 :(得分:8)
简单地说;
$WeekAgo = strtotime("-1 week"); //A week before today
$MonthAgo = strtotime("-1 month"); //A month before today
答案 3 :(得分:3)
也许你应该在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');
答案 4 :(得分:2)
正如@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)
答案 5 :(得分:1)
SELECT user, email FROM tbl WHERE expire_date = CURRENT_TIMESTAMP - INTERVAL 1 MONTH
请注意,我使用=
并且不小于,因为如果您只是比较它不到一个月,那么您将在上个月每天通过电子邮件发送给用户。
答案 6 :(得分:1)
您可以在MySQL查询中使用ADDDATE()
函数。
> SELECT ADDDATE( '28-03-2012', INTERVAL 1 MONTH )
28-04-2012
有关它的更多信息here。
如果您的expire_date
列上有索引,如果您查询带有WHERE
语句的条目,则可以非常快地完成此操作:
WHERE expire_date = ADDDATE(CURDATE(), INTERVAL 1 MONTH)
(有关CURDATE()
右here)
如果您每天只完成一次,它只会选择最多一次的所有人,而不会向他们发送两次电子邮件,因为它只选择距其过期日期正好一个月的那些人。
当然,如果您在MySQL表中使用 DATE字段类型,则无需额外关注日期的具体表示。
答案 7 :(得分:0)
您可能需要将日期字符串转换为unix时间,然后执行select datediff。 (我假设您使用的是sql)。
SELECT * FROM table WHERE (SELECT datediff(now(),your-date-in-unixtime) > 30)
答案 8 :(得分:0)
如何在php中获取一个月的日期
const auth = firebase.auth();
const promise = auth.createUserWithEmailAndPassword(email , password);
promise.catch(e => console.log(e.message));
var errorCode = e.message;
var emailExists = document.querySelector('.error-message-email');
var passwordWeak = document.querySelector('.error-message-password-weak');
if (errorCode === 'The email address is already in use by another account.') {
emailExists.style.display = 'block';
}
if (errorCode === 'auth/weak-password') {
passwordWeak.style.display = 'block'
}
答案 9 :(得分:0)
我很惊讶这个答案在这里丢失:
$oneMonthAgo = new \DateTime('1 month ago');
echo $oneMonthAgo->format('Y-m-d');
今天是2019-01-28
。上面的代码输出2018-12-28
在这里可以和http://sandbox.onlinephpfunctions.com/code/ad457f441719c6b9f68dc646445aac86a3f7f7a0
一起玩答案 10 :(得分:-1)
对于SQL,您可以使用以下查询
SELECT *
FROM tablename
WHERE DATE_FORMAT(created_at, '%Y/%m/%d') = (CURDATE() + INTERVAL 1 MONTH)