Задать вопрос
@targetologru

Как посчитать количество затронутых месяцев между двумя датами?

$date1 = strtotime('08.10.2019');
$date2 = strtotime('10.11.2019');


Мне как-то надо посчитать, сколько фактически месяцев задействовано между этими датами. То есть правильный ответ: 2, это октябрь и ноябрь.

Но все примеры, что я нашел в интернете, показывают 1.

Направьте на правильный ход мысли, пожалуйста.

Самый тупой способ, который мне пришел на ум, это от первой даты до второй пройтись циклом и записать в массив array('year' => 'month'), и потом просто посчитать количество элементов, но это накладно получается по ресурсам, если, например, будет 125 месяцев.
  • Вопрос задан
  • 467 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Skillbox
    PHP-разработчик. Базовый уровень
    3 месяца
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Stepik
    PHP (pro)
    2 недели
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Onskills
    PHP: базовый курс
    1 месяц
    Далее
Решения вопроса 1
0xD34F
@0xD34F
12 * (год2 - год1) + месяц2 - месяц1 + 1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
glaphire
@glaphire Куратор тега PHP
PHP developer
Тоже поискала варианты, много устрашающих)
У меня получилось так:
SELECT COUNT(
    	DISTINCT CONCAT(
            MONTH(date),
            YEAR(date)
        )
    ) 
    FROM `table_example` WHERE date IS NOT NULL

Берет комбинацию месяц+год, считает кол-во уникальных значений
Ответ написан
Комментировать
fast-je
@fast-je
Пишу на php.
Они то все верно показывают, тут всегда будет 1, месяц разница между ними это ясно.
Делай +1, хз.

Хотя вот
$start    = (new DateTime('08-10-2019'))->modify('first day of this month');
$end      = (new DateTime('10-11-2019'))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);

$countMonth = 0;

foreach ($period as $dt) {
    echo $dt->format("Y-m") . "<br>\n";
    ++$countMonth;
}

echo $countMonth;
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы