@targetologru

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

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


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

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

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

Самый тупой способ, который мне пришел на ум, это от первой даты до второй пройтись циклом и записать в массив array('year' => 'month'), и потом просто посчитать количество элементов, но это накладно получается по ресурсам, если, например, будет 125 месяцев.
  • Вопрос задан
  • 385 просмотров
Решения вопроса 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;
Ответ написан
Ваш ответ на вопрос

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

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