Одна ошибка, которую я замечаю, состоит в том, что может быть 1 месяц и 0 недель, как если бы вы вводили 15 апреля.Что приведет только к выводу дней и часов.Измените следующее.
} elseif ($week == 0) {
на
} elseif ($week == 0 && $months == 0 && $years == 0) {
Это может быть причиной вашей проблемы в зависимости от введенной вами даты.