Получить временные интервалы

Возник такой вопрос. Необходимо вывести график продаж за каждый месяц за последние пол года. Начало и конец текущего месяца я получаю вот так:
$month_now_first_day = strtotime(date('Y-m-1'));
$month_now_last_day = strtotime(date('Y-m-t'));

А как мне получить теперь минус один месяц, минус два и т.д.
Пробую так
$month_minus_odin_last_day = strtotime ( '-1 month' , $month_now_last_day ) ;

php говорит что последний день октября это 1383066000, (Tue, 29 Oct 2013 17:00:00 GMT). Но ведь в октябре 31 день, значит должно быть 30 октября 17:00.
Как мне правильно получить последние и первые дни месяцев?
  • Вопрос задан
  • 9595 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Смысл извращаться с таймштампами, если давно есть штатный datetime?
php.net/manual/en/class.datetime.php
$rFrom = new datetime('first day of -6 month midnight');
$rTo = new datetime('last day of -6 month midnight');
var_dump($rFrom, $rTo);

Класс DatePeriod тоже есть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
deadbyelpy
@deadbyelpy
веб-шмеб
Если сегодня 30 число, то время -1 месяц будет ровно 30 число, это вполне логично.
если использовать эту заковыристую конструкцию (первое что пришло в голову по мануалу, а значит убого), можно получить время месяца назад/вперед:
echo strtotime(date("Y-m-t", strtotime("-1 month") ) ); // выведет последний  день месяца
echo strtotime(date("Y-m-1", strtotime("-1 month") ) ); // выведет первый день месяца

Но проще указать номер месяца, в параметре "m", зная какой сейчас месяц и соответственно +\- число
Ответ написан
denissov
@denissov Автор вопроса
Но проще указать номер месяца, в параметре "m", зная какой сейчас месяц и соответственно +\- число

тут я вас не совсем понял, мы ведь не знаем сколько дней будет тремя месяцами например ранее, соответственно подставив +/- число какое-то определённое мы всё сломаем.
Как вобще красиво сделать чтобы правильные интервалы были с учётом количества дней?)))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы