Подсчет кол-ва дней и форматирование результата между двумя датами

288
12 октября 2017, 12:55

Я работаю над реализацией графика продаж. У меня есть ось Х. ВВерху на странице есть фильтр, который позволяет ввести диапазон дат, то есть сначала вводим дату от, затем дату до.

Мне необходимо определить, как выводить даты на оси Х.

Я предполагаю делать это так:

К примеру, если человек ввел 2 даты в пределе одного месяца, или между месяцами, но не более чем скажем 31 день, то мне необходимо получить массив, где будут элементы по дням.

То есть ось Х будет вида: 01.10.2017, 02.10.2017,...31.10.2017.

Но если же пользователь ввел 2 даты в диапазоне больше чем 31, то необходимо уже вывести массив из 2 дат. Первый элемент это первый месяц, второй это второй.

В этом случае на оси Х должно быть 10.2017, 12.2017

Если человек ввел диапазон более чем 12 мес, то уже необходимо выводить годами.

В этом случае на оси Х должно быть 2016, 2017

Подсчет количества дней между двумя датами я делаю так:

    $datetime1 = date_create("01.05.2017");
    $datetime2 = date_create("31.05.2017");
    $interval = date_diff($datetime1, $datetime2);
    $days = $interval->format('%a');
    if($days <= 31)
      {
        $period = new DatePeriod(
         new DateTime($dateFrom),
         new DateInterval('P1D'),
         (new DateTime($dateTo))->modify('+1 days')
      );
      //Абсцисса Х
      $daysArray;
      foreach( $period as $date) {
          $daysArray .= "'".$date->format('Y-m-d')."',";
      }
      }
if($days > 31 && $days < 365)
{
 //Тут уже необходимо выводить не дни а месяца в формате m.Y
$period = new DatePeriod(
         new DateTime($dateFrom),
         new DateInterval('P1D'),
         (new DateTime($dateTo))->modify('+1 month')
      );
      //Абсцисса Х
      $daysArray;
      foreach( $period as $date) {
          $daysArray .= "'".$date->format('Y-m-d')."',";
      }
    }

После echo $daysArray я получаю то что мне нужно. Но мой код работает только в приделах 31 дня, если я добавлю условие >31 дня то мне уже необходимо вывести только даты по месяцам. Я по аналогии с <31 вывожу но в modify ставлю +1 month но в результате я получаю по дням, а не по месяцам.

Вопрос как это реализовать?

READ ALSO
Проверка наличия таблицы в БД

Проверка наличия таблицы в БД

Итак, я от пользователя получаю название таблицы, из которой он хочет получить данные, и я должен проверить наличие этой таблицыКак я понял,...

552
MVC или Фреймворк?

MVC или Фреймворк?

Есть шаблон MVC на с которым я разобрался и могу делать простенькие задачки используя MVCНо проблема в роутере, он так прописан, что не запускается...

228
Ошибка: Parse error: syntax error, unexpected &#39;)&#39; in /home/user167/devildrop.ru/html/epicdrop/connector.php on line 7 [требует правки]

Ошибка: Parse error: syntax error, unexpected ')' in /home/user167/devildrop.ru/html/epicdrop/connector.php on line 7 [требует правки]

Выдает ошибку: Parse error: syntax error, unexpected ')' in /home/user167/devildropru/html/epicdrop/connector

231
Насколько критичны эти ошибки?

Насколько критичны эти ошибки?

При установке миграций через composer появились эти ошибки:

220