function getDays(x) { var un = x - 10 * Math.floor(x / 10); // Единицы var de = ((x - 100 * Math.floor(x / 100)) - un) / 10 ; // Десятки var word = ''; switch (un) { default: word = 'дней'; break; case 1: word = (de != 1) ? 'день' : 'дней'; break; case 2: case 3: case 4: word = (de != 1) ? 'дня' : 'дней'; break; } return word; } for (var i = 0; i < 1000; i++) { document.write(i + ' ' + getDays(i) + "<Br />"); }
пасиба. завтра на свежую голову попробую довести до ума
<script language="javascript"> d0 = new Date('August 12, 2008'); d1 = new Date(); dt = (d0.getTime() - d1.getTime()) / (1000*60*60*24) + 1; var x = Math.round(dt); var reg=/[34]$/; var reg2=reg=/[12]$/; r=(reg2.exec(x))?'день':(reg.exec(x))?'дня':'дней'; document.write(x +' ' + r); </script>
что-то у меня по-прежнему всё время выдает "дней" для всех чисел )
Задача вот какая:
Сейчас
659 дней
658 дней
657 дней
656 дней
655 дней
654 дней
653 дней
652 дней
651 дней
650 дней
А хотелось бы
654 днЯ
653 днЯ
652 днЯ
651 день
dt = (d0.getTime() - d1.getTime()) / (1000*60*60*24) + 1;
проблема следующая: отчитываются дни до заданного события. Сейчас например 655 дней. Если в поле
d0 = new Date('August 12, 2008');
Насколько я понял в операторе switch() выбирается всё время значение case 0. Оно в принципе и логично, если бы тип переменных был float. Но на момент написания скрипта я полагал, что JS работает только с целочисленным типом данных int.
Возможно Вы знаете как задать тип int в явном виде для переменной х?
ну проблема в том, что когда количество дней например 660, то добавляется "дней". когда 653, то добавляется опять "дней". а хотелось бы "дня" чтобы добавлялось после числа
цикл switch(). отлично сказал :) время сказывается. конечно же оператор!