<?php
function getFullYearsBetweenDates($start, $current)
{
/** Здесь это можно сделать через разбивку даты по дефису. Приведенный здесь вариант более универсален. */
$userStartDate = strtotime($start);
$currentDate = strtotime($current);
/** Берем год по дате начала и текущей, а также месяц и день. */
$userStartDateM = intval(date("m", $userStartDate));
$currentDateM = intval(date("m", $currentDate));
$userStartDateD = intval(date("d", $userStartDate));
$currentDateD = intval(date("d", $currentDate));
$userStartDateYear = intval(date("Y", $userStartDate));
$currentDateYear = intval(date("Y", $currentDate));
/** Получаем количество лет между датами. */
$worksYears = $currentDateYear - $userStartDateYear;
/** Теперь проверяем разницу между месяцами. Если текущий месяц меньше стартового, то нужно убрать неполный год */
if ($currentDateM < $userStartDateM) $worksYears -= 1;
/** То же самое делаем с датой для переходного месяца */
if ($currentDateM == $userStartDateM && $currentDateD < $userStartDateD) $worksYears -= 1;
/** При дате М-Д больше, чем стартовая ничего не делаем */
return $worksYears;
}
/** Тесты */
$testDatePairs = [
['2012-10-11', '2015-11-10'], //3 полых года
['2012-10-11', '2015-10-12'], //3 полых года
['2012-10-11', '2015-10-11'], //3 полых года
['2012-10-11', '2015-10-10'], //2 полых года
['2012-10-11', '2015-05-10'], //2 полых года
['2012-10-11', '2013-05-10'], //0 полых года
['2012-10-11', '2013-10-10'], //0 полых года
['2012-10-11', '2013-10-11'], //1 полых года
['2012-10-11', '2013-11-11'], //1 полых года
];
foreach($testDatePairs as $dates) {
echo "{$dates[0]} - {$dates[1]} : ".getFullYearsBetweenDates($dates[0], $dates[1])."\n";
}