Полезные функции при выводе информации на русском языке (окончания, номера месяцев, дней)

Полезные функции при выводе информации на русском языке (окончания, номера месяцев, дней)

Очень часто веб-разработчики ленятся и вместо, скажем, надписи «3 дня» пишут «дней: 3». Действительно, зачем заморачиваться и программировать еще и функцию подбора окончания слова? Я решил упростить Вам эту задачу и представляю свои функции, которые использую в проектах.

Функция подбора окончания слова
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]);
            }
    }
}

Пример использования:

// $days - количество дней
за <?=$days?> <?=num2word($days, array('день', 'дня', 'дней'));?>
/*
 * $days=2: за 2 дня
 * $days=5: за 5 дней
 * ...
 */
Функция вывода месяца по его номеру
function getRusMonth($month){
  if($month > 12 || $month < 1) return FALSE;
  $aMonth = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
  return $aMonth[$month - 1];
}

Пример использования:

// $month - номер месяца
// $day_of_month - число месяца
<?=$day_of_month?> <?=getRusMonth($month);?>
/*
 * $day_of_month=1; $month=1: 1 января
 * $day_of_month=5; $month=3: 5 марта
 * ...
 */
Функция для вывода дня недели
/*
 * русский день недели
 * пример: getRusWeekDay(5)
 */
function getRusWeekDay($day){
  if($day > 7 || $day < 1) return FALSE;
  $aMonth = array('ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС');
  return $aMonth[$day - 1];
}

Иногда нам требуется реализовать вывод анонса статьи. Проблемы появляются тогда, когда в вёрстке количество символов анонса — фиксировано и заканчивается многоточием.

Для реализации этой задачи можно воспользоваться следующей заготовкой.

Функция для создания анонсов с многоточием
/*
 * функция для создания анонсов отзывов с многоточием
 * $text - необрезанный текст анонса
 * $length - длинна текста, после которого текст анонса 
 * обрезается и ставится многоточие
 */
function createAnons($text, $length, $clearTags = true){
    $text = trim($text);
    if ($clearTags === true)
    $text = strip_tags($text);
    if ($length <= 0 || strlen($text) <= $length)
    return $text;
    $out = mb_substr($text, 0, $length);
    $pos = mb_strrpos($out, ' ');
    if ($pos)
    $out = mb_substr($out, 0, $pos);
    return $out.'…';
}