获得上个月第一天和最后一天的最佳方式?
我正在寻找获得上个月第一天和最后一天的最佳方式。我使用它们进行SQL查询以获取上个月的统计信息。获得上个月第一天和最后一天的最佳方式?
我认为这是最好的方式,更优化但不是更强化,任何人都有另一种方法来做同样的事情吗?
$month_ini = date("Y-m-d", mktime(0, 0, 0, date("m", strtotime("-1 month")), 1, date("Y", strtotime("-1 month"))));
$month_end = date("Y-m-d", 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('Y-m-d'); // 2012-02-01
echo $month_end->format('Y-m-d'); // 2012-02-29
这应该是答案imho – LeonardChallis 2013-06-11 22:00:36
这也是如果你想要一个时间戳,可以用'strtotime()'出色地工作。像'strtotime('上个月的最后一天')'。 – 2013-09-11 10:39:52
如果tou想在某月某月的第一个/最后一天进入,你会怎么做? – Czechnology 2014-01-15 17:36:39
你可以在MySQL做到这一点:
WHERE `DateAndTime` >= '2012-02-01 00:00:00'
AND `DateAndTime` < '2012-03-01 00:00:00'
谢谢,但更慢在mysql :(在此感谢,我需要优化 – aaronroman 2012-03-16 10:41:17
把一个索引放在'DateAndTime'列。假设你不会得到比这更快的结果 – Bazzz 2012-03-16 10:42:43
如果你这样做了MySQL查询的目的,你有没有考虑使用MONTH function,例如
SELECT [whatever stats you're after] FROM table
WHERE MONTH(date_field) = 12 and YEAR(date_field) = 2011
这将得到您的12月的统计数据。如果您开始遇到性能问题,并且历史数据不会更改,则可能需要将数据非规范化为汇总表(按您需要的最小增量汇总,例如每天/每小时/每月等)。
以及2010年12月和2011年12月有多少行?如何区分它们? – Bazzz 2012-03-16 10:41:08
@Bazzz Doh!好点,已经添加了等效的YEAR过滤器(尽管如果你遵循我提供的链接,这应该是非常明显的!) – liquorvicar 2012-03-16 10:44:13
末前一个月的一天:
date("Y-m-d", mktime(0, 0, 0, date("m"), 0));
前一个月的第一天:
date("Y-m-d", mktime(0, 0, 0, date("m")-1, 1));
让MySQL处理日期。
什么是数据库做,让它做。
这样的:
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。
echo date('Y-m-d', strtotime('first day of last month'));
echo date('Y-m-d', strtotime('last day of last month'));
MySQL的使用例子:
我在MySQL和PHP脚本,短期和简单的使用这些
$query = $db->query("SELECT * FROM mytable WHERE 1 AND mydate >= '".date('Y-m-d', strtotime('first day of last month'))."'");
[本月的PHP最后一天(HTTP的
可能重复:// *.com/questions/1686724/php-last-day-of-the-month) – DaveRandom 2012-03-16 10:33:14
你有没有试过strtotime? – 2012-03-16 10:33:30
http://*.com/questions/2680501/how-can-i-find-the-first-and-last-date-in-a-month-using-php – 2012-03-16 10:33:36