В предыдущем посте я писал как считал количество лет, месяцев и дней прошедших с какого-то события. Возникла проблема как выводить результаты в текстовом формате, ведь 1 год, 3 года, 5 лет, а 21 снова год. Тоже самое с месяцами и днями.
На самом деле ничего особенно сложного нет. Кутерьма с падежами идет только до 10, а дальше уже все повторяется. То есть берем остаток от деления нашего числа на 10 и из множества кейсов вставляем нужное слово:
switch(a % 10){Но есть одно исключение это числа от 11 до 14. Обработать исключением можно используя оператор if и else. Но я решил обойтись без else.
case 1:
{document.writeln('год');
break;}
case 2:
case 3:
case 4:
{document.writeln('года');
break;}
default:
document.writeln('лет')
}
if ((a % 100 > 10)&(a % 100 < 15)){ a=5};
Так сказать исключение загоняем в общее правило. Переприсваивать переменную имеем право, так как значение её мы уже вывели.
Интересно заметить, что идея возможности использования оператора case посетила меня во время написания поста.
Изначально было как-то так:if ((a % 10 > 4) || (a % 10 ==0) || ((a % 100 > 10) && (a % 100 < 15))) {Строчек конечно меньше, но в условии первого if без бутылки разобраться сложно.
document.writeln('лет');}
else if (a % 10 ==1 ) {document.writeln('год')}
else document.writeln('года');
Как говорится "хорошая мысля приходит опосля", так что пришлось переделывать функции вывода, которая сейчас выглядит так:
function writeDate(a,b,c) {Изначально задумывалось все эти махинации, чтобы выводить время жизни , но потом появилась безумная мысль выводить таким образом свою биографию.
document.writeln(''+a+'');
if ((a % 100 > 10)&(a % 100 < 15)){ a=5};
switch(a % 10){
case 1:
{document.writeln('год');
break;}
case 2:
case 3:
case 4:
{document.writeln('года');
break;}
default:
document.writeln('лет');
}
document.writeln(''+b+'');
if ((b % 100 > 10)&(b % 100 < 15)){ b=5};
switch(b % 10){
case 1:
{document.writeln('месяц');
break;}
case 2:
case 3:
case 4:
{document.writeln('месяца');
break;}
default:
document.writeln('меясцев');
}
document.writeln(''+c+'');
if ((c % 100 > 10)&(c % 100 < 15)){ c=5};
switch(c % 10){
case 1:
{document.writeln('день');
break;}
case 2:
case 3:
case 4:
{document.writeln('дня');
break;}
default:
document.writeln('дней');
}
}

Комментариев нет:
Отправить комментарий