Подтвердить что ты не робот

Лучший способ получить первый и последний день в прошлом месяце?

Я ищу лучший способ получить первый и последний день прошлого месяца. Я использую их для получения 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"))));

Спасибо!!

4b9b3361

Ответ 1

В 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

Ответ 2

Последний день предыдущего месяца:

date("Y-m-d", mktime(0, 0, 0, date("m"), 0));

Первый день предыдущего месяца:

date("Y-m-d", mktime(0, 0, 0, date("m")-1, 1));

Ответ 3

Если вы делаете это с целью запроса MySQL, считаете ли вы, что используете функцию MONTH, например

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

Это даст вам статистику за декабрь. Если вы начинаете испытывать проблемы с производительностью, а исторические данные не изменяются, вам может понадобиться денормализовать данные в сводную таблицу (свернутую минимальным требуемым шагом, например, ежедневно/ежечасно/ежемесячно и т.д.).

Ответ 4

Я использую их в сценариях MySQL и PHP, короткие и простые:

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

Пример использования MySQL:

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

Ответ 5

вы можете сделать это в MySQL:

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

Ответ 6

пусть 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.