Как работает данный 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)
? " года" : " лет"));
}