Как работает данный php код склонения годов? (1 год/ 2 года/ 5 лет)

Я взял готовое решение со старого php форума времён 2010 и обернул в статический метод, решение полностью рабочее, но мне не совсем понятен принцип работы этого кода.

Например для чего тут нужно деление по модулю? Почему именно деление по модулю, почему на 10 и на 100. Почему если результат деления на 10 ($divisionByTen) равен 1 и результат деления на 100 ($divisionByOneHundred) не равен 11, то мы получаем "год" и.т.д. Если кто знает почему данное решение работает или хорошо знает математику, объясните плиз.

/**
 * Inflect years.
 *
 * @param int $year
 * @return string
 */
public static function yearAsText(int $year): string
{
    $absoluteYearValue = abs($year);

    $divisionByTen = $absoluteYearValue % 10;
    $divisionByOneHundred = $absoluteYearValue % 100;

    return $year . ($divisionByTen == 1 && $divisionByOneHundred != 11
            ? " год" : ($divisionByTen >= 2 && $divisionByOneHundred <= 4 && ($divisionByOneHundred < 10 || $divisionByOneHundred >= 20)
                ? " года" : " лет"));
}

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