Склонение числительных, что я делаю не так?

Всем привет. Мне нужно, чтобы я мог выводить число дней, прошедшее с определенного момента времени(даты).
Также необходимо, чтобы дней, дня, день склонялись, функцию сделал так:

function days($n) {
		$today = time();
		$moon = mktime(0, 0, 0, 1, 0, 2018);
		$z = floor(($today - $moon) / 86400);

		$d = $z + $n;
		//echo $d;

		$y = $d % 10;
		$x = $d / 10 % 10;
		if ($x && $x == 1) {
			echo "Опубликован: ".$d." дней"." назад.";
		} elseif ($y == 1) {
			 echo "Опубликован: ".$d." день"." назад.";
		} elseif (in_array($y, array("2,3,4"))) {
			 echo "Опубликован: ".$d." дня"." назад.";
		} else {
			//	echo "Опубликован: ".$d." дня"." назад.";
		}
	}


Вывожу так:

<?php echo "".days(122).""; ?>

Часть работает, часть нет, что я не так делаю?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 3
@imhuman
То, что сразу бросается в глаза
вместо } elseif (in_array($y, array("2,3,4"))) {
нужно } elseif (in_array($y, array(2,3,4))) {
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
https://gist.github.com/fomigo/2382775
возьмите и не пишите велосипедов таких.

или сразу
https://php.ru/forum/threads/data-v-formate-minute...
Ответ написан
Комментировать
@synapse_people
function num2word($num, $words)
{
    $num = $num % 100;
    if ($num > 19) {
        $num = $num % 10;
    }
    switch ($num) {
        case 1: {
            return($words[0]);
        }
        case 2: case 3: case 4: {
            return($words[1]);
        }
        default: {
            return($words[2]);
        }
    }
}

echo num2word(50, array('год', 'года', 'лет'));
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы