获得上个月的第一天和最后一天的最佳方式?

我正在寻找最好的方法来获得上个月的第一天和最后一天。 我使用它们进行SQL查询来获取上个月的统计信息。

我认为这是最好的方式,更优化,但不是更多,任何人有另一种方式做同样的?

$month_ini = date("Ymd", mktime(0, 0, 0, date("m", strtotime("-1 month")), 1, date("Y", strtotime("-1 month")))); $month_end = date("Ymd", mktime(0, 0, 0, date("m", strtotime("-1 month")), date("t", strtotime("-1 month")), date("Y", strtotime("-1 month")))); 

谢谢!!

在PHP 5.3中,您可以使用DateTime类:

 <?php $month_ini = new DateTime("first day of last month"); $month_end = new DateTime("last day of last month"); echo $month_ini->format('Ym-d'); // 2012-02-01 echo $month_end->format('Ym-d'); // 2012-02-29 

前一个月的最后一天:

 date("Ymd", mktime(0, 0, 0, date("m"), 0)); 

上个月的第一天:

 date("Ymd", mktime(0, 0, 0, date("m")-1, 1)); 

如果你这样做的目的是MySQL查询,你有没有考虑使用MONTH函数 ,例如

 SELECT [whatever stats you're after] FROM table WHERE MONTH(date_field) = 12 and YEAR(date_field) = 2011 

这会得到你12月份的统计数据。 如果您开始遇到性能问题,并且历史数据不会改变,那么您可能需要将数据非规范化到一个聚集表(按您需要的最小增量卷起,例如每天/每小时/每月等)。

我在MySQL和PHP脚本中使用这些简单而简单的脚本:

 echo date('Ym-d', strtotime('first day of last month')); echo date('Ym-d', strtotime('last day of last month')); 

MySQL使用示例:

 $query = $db->query("SELECT * FROM mytable WHERE 1 AND mydate >= '".date('Ym-d', strtotime('first day of last month'))."'"); 

你可以在MySQL中这样做:

 WHERE `DateAndTime` >= '2012-02-01 00:00:00' AND `DateAndTime` < '2012-03-01 00:00:00' 

让MySQL处理date。

什么是数据库做的,让它做。

喜欢这个:

 mysql_query("set @last_day=last_day(now()-interval 1 month),@first_day=(@last_day-interval 1 month)+interval 1 day"); $result=mysql_query("select * from `table` where (`date` between @first_day and @last_day)"); 

最好的是,即使年份发生变化,这也是可行的。

只要记得改变数据库的时区来匹配PHP。