Я ищу лучший способ получить первый и последний день последнего месяца. Я использую их для получения 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
Это даст вам статистику за декабрь. Если вы начинаете испытывать проблемы с производительностью, а исторические данные не меняются, вам может потребоваться денормализация данных в сводную таблицу (свернутую минимальным приращением, который вам нужен, например, ежедневно / час / месяц и т. Д.).
Я использую их в сценариях 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 справится с датами.
все, что нужно для базы данных, пусть это делает.
как это:
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.