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获取本月第一天和上个月第一天的日期

用 php 获取下一个第 15 天和/或第 30 天的日期?

asp获取当前日期并自动加1个月如何写

Easyui获取上个月最后一天的日期,以及获取当前时间的前一天日期

java 根据日期获取当月所有日期,和 上个月所有日期