php获取日期-1个月
Posted
技术标签:
【中文标题】php获取日期-1个月【英文标题】:php get date -1 month 【发布时间】:2012-03-28 15:56:41 【问题描述】:所以情况就是这样。在我的数据库表中,我有一个名为 expire_date 的列,我在其中为每一行放置了一个特定的日期。 例如,到期日期是 28-04-2012
我需要一个 php 代码,该代码将通过电子邮件向某个用户发送通知,指出在该日期到期的某件事是 1 个月后到期。因此,如果今天是 2012 年 3 月 28 日,则意味着该事物到期前只有 1 个月。 我没有为此编写任何代码,因为我不知道如何解决 -1 个月。
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】:先用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 . '"' );
希望对你有帮助
【讨论】:
@Tales 你实际上应该能够使用少 1 个 date() 函数获得相同的日期,例如:date('Y-m-d', strtotime(date('Y-m-d') . ' +1 month'));
@Tales 其实我猜只是echo date('Y-m-d', strtotime('+1 month'));
对吧?【参考方案3】:
简单;
$WeekAgo = strtotime("-1 week"); //A week before today
$MonthAgo = strtotime("-1 month"); //A month before today
【讨论】:
【参考方案4】:我很惊讶这里缺少这个答案:
$oneMonthAgo = new \DateTime('1 month ago');
echo $oneMonthAgo->format('Y-m-d');
今天是2019-01-28
。上面的代码输出2018-12-28
在这里可以玩:http://sandbox.onlinephpfunctions.com/code/ad457f441719c6b9f68dc646445aac86a3f7f7a0
【讨论】:
谢谢约翰,这是 imo 的最佳答案。【参考方案5】:也许你应该在 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');
【讨论】:
【参考方案6】:正如@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)
【讨论】:
【参考方案7】:SELECT user, email FROM tbl WHERE expire_date = CURRENT_TIMESTAMP - INTERVAL 1 MONTH
请注意,我使用=
并且不少于,因为如果您只比较它不到一个月,那么您将在上个月每天向用户发送电子邮件。
【讨论】:
这会选择一个月前过期的记录。【参考方案8】:您可以在 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)
如果您每天只执行一次,它最多只会选择所有人一次,并且不会向他们发送两次电子邮件,因为它只会选择那些距离过期日期正好 1 个月的人。
当然,如果您在 MySQL 表中使用 DATE 字段类型,则无需额外关心日期的具体表示即可。
【讨论】:
【参考方案9】:如何在 php 中获取前一个月的日期
<?php
$d = strtotime("-1 Months");
echo date("Y-m-d h:i:sa", $d);
?>
【讨论】:
【参考方案10】:您可能需要将日期字符串转换为 unix 时间,然后执行选择 datediff。 (我假设你正在使用 sql)。
SELECT * FROM table WHERE (SELECT datediff(now(),your-date-in-unixtime) > 30)
【讨论】:
你应该避免在你试图过滤的字段上使用函数,因为它会使索引不可用。【参考方案11】:对于 SQL,您可以使用以下查询
SELECT *
FROM tablename
WHERE DATE_FORMAT(created_at, '%Y/%m/%d') = (CURDATE() + INTERVAL 1 MONTH)
【讨论】:
您应该始终避免这样做。在要过滤的 DATE/DATETIME 字段上使用DATE_FORMAT()
将使任何索引都无用。以上是关于php获取日期-1个月的主要内容,如果未能解决你的问题,请参考以下文章
如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?
用 php 获取下一个第 15 天和/或第 30 天的日期?