Просто используйте простую арифметику.Мы явно не озабочены часовыми поясами, переходом на летнее время, изменениями в календаре и т. Д., Поэтому мы также не заботимся о разборе даты «в некотором часовом поясе, основанном на каком-то календаре».То, что у нас осталось, это просто арифметика, используя месяцы.Год 12 месяцев.И теперь мы почти закончили.
function ym_as_months($v) {
$v = array_map("intval", explode("-", $v));
return $v[0]*12 + $v[1];
}
$firstDate = "2017-09";
$firstMonths = ym_as_months($firstDate);
$secondDate = "2018-11";
$secondMonths = ym_as_months($secondDate);
$diff = $secondMonths - $firstMonths;
echo "There are $diff months between $firstDate and $secondDate.";
И мы получили:
Между 2017-09 и 2018-11 гг. 14 месяцев.
Отлично.
Конечно, в зависимости от того, как вы получаете эти отметки даты в своем приложении, может быть гораздо проще даже не передавать их как строку, а просто как двачисла с самого начала, и в этом случае это становится еще меньше работы.
В качестве альтернативы, сделать ваше преобразование в качестве самого последнего шага, в соответствии с другой ответ здесь .