"день" "дней" при разных значениях поля отчета календаря

Есть скрипт обратного отчета даты. Нужно при разных значениях выводить либо "дней", либо "дня". "осталось 2 дня","осталось 10 дней". Как можно это реализовать?

<div class="countdown">
  <div class="countdown-digits">10</div>
  <div class="countdown-label">дней</div>
</div>


Ответы (2 шт):

Автор решения: RifmaMan

Можно к примеру сделать условие при выводе:

<? foreach($days as $day): ?>
  <? switch(true): ?>
    <? case ($day == 1 || $day == 21 || $day == 31): ?>
      <? $caption = 'день'; break; ?>
    <? case (in_array($day, [2, 3, 4, 22, 23, 24])): ?>
      <? $caption = 'дня'; break; ?>
    <? default: ?>
      <? $caption = 'дней'; ?>
  <? endswitch; ?>
  <div class="countdown">
    <div class="countdown-digits"><?= $day; ?></div>
    <div class="countdown-label"><?= $caption; ?></div>
  </div>
<? endforeach; ?>

→ Ссылка
Автор решения: Вадим Александру
function decl($n, $str_cases)
{
  $cases = [2, 0, 1, 1, 1, 2];
  return  $str_cases[ (($n % 100 ) > 4 && ($n % 100) < 20) ? 2 : $cases[min(($n % 10), 5)] ];
}


print_r(
  decl(10, ['День', 'Дня', 'Дней'])
);
→ Ссылка