PSK

Рейтинг
99
Регистрация
24.10.2006
Коля Дубр:
Как отсчитать кол-во дней - сами разбирайтесь, это не сложно. А вот выбрать правильную форму - задача несколько менее тривиальная. Вот кусочек кода, проверьте:


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 />");
}

пасиба. завтра на свежую голову попробую довести до ума

Dreammaker:
А вот и мой способ:


<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>


Сама идея взята отсюда
http://www.simplex.ru/news/win/1-16.html

и переделана мной только что :) Оригинал для данной задачи не хотел работать, пришло основательно его обработать наждаком :)

update: при том так, что можно уже авторство было бы и не указывать :)

что-то у меня по-прежнему всё время выдает "дней" для всех чисел )

Задача вот какая:

Сейчас

659 дней

658 дней

657 дней

656 дней

655 дней

654 дней

653 дней

652 дней

651 дней

650 дней

А хотелось бы

659 дней

658 дней

657 дней

656 дней

655 дней

654 днЯ

653 днЯ

652 днЯ

651 день

650 дней

Dreammaker:

dt = (d0.getTime() - d1.getTime()) / (1000*60*60*24) + 1;


Так вроде правильнее считает :) Если имелось в виду, то что день не доставало. По крайней мере в следующем месяце правильно считает..

Если проблема не в этом, то, плз, озвучьте её..

update: пока писал не было описания проблемы :)

проблема следующая: отчитываются дни до заданного события. Сейчас например 655 дней. Если в поле

d0 = new Date('August 12, 2008');
задать 'August 11, 2008' , то скрипт опять сгенерирует 654 дней. 'August 10, 2008' - 653 дней и т.д.

Насколько я понял в операторе switch() выбирается всё время значение case 0. Оно в принципе и логично, если бы тип переменных был float. Но на момент написания скрипта я полагал, что JS работает только с целочисленным типом данных int.

Возможно Вы знаете как задать тип int в явном виде для переменной х?

dkameleon:
скопировал код один в один. на первый взгляд всё работает.
детальнее опишите проблему.

ну проблема в том, что когда количество дней например 660, то добавляется "дней". когда 653, то добавляется опять "дней". а хотелось бы "дня" чтобы добавлялось после числа

цикл switch(). отлично сказал :) время сказывается. конечно же оператор!

Всего: 86