|
|
Модератор форума: JonMagon |
Сообщество uCoz » Вебмастеру » JavaScript, Flash и прочие технологии » JavaScript » Склонение слова |
Склонение слова |
Всем привет
![]() Друзья помогите сделать склонение слова в скрипте... Нужно сделать что бы когда оставалось № дней до события писало 1 день, 2 дня, 5 дней и т.д. Вот сам скрипт: Код <script> document.write('<span id="ngdat">Осталось</span>') function ojidanieNG() { var today = new Date(); var BigDay = new Date("$OTHER5$"); var timeLeft = (BigDay.getTime() - today.getTime()); var e_daysLeft = timeLeft / 86400000; var daysLeft = Math.floor(e_daysLeft); var e_hrsLeft = (e_daysLeft - daysLeft)*24; var hrsLeft = Math.floor(e_hrsLeft); var e_minsLeft = (e_hrsLeft - hrsLeft)*60; var minsLeft = Math.floor(e_minsLeft); var seksLeft = Math.floor((e_minsLeft - minsLeft)*60); if (BigDay.getTime() > today.getTime() ) document.getElementById("ngdat").innerHTML = '<span style="font-size:10pt"><font color=#5D94BE><b>Осталось</font><font color="#ff6600">:</font> '+daysLeft+' <font color="#ff6600">дней</font> '+hrsLeft+'<font color="#ff6600">:</font>'+minsLeft+'<font color="#ff6600">:</font>'+seksLeft+'</b></span>' else document.getElementById("ngdat").innerHTML = 'С новым годом!!!' } setInterval("ojidanieNG()", 50) </script> Сообщение отредактировал bit_vlad - Воскресенье, 31 Янв 2016, 16:48:41
|
bit_vlad, давайте попробуем!
1) Вспоминаем русский язык. Основное правило: *1 - день *(2..4) - дня *(0,5..9) - дней Исключения: 11..14 - дней 2) Вспоминаем математику: Чтобы найти последнюю цифру числа, надо найти остаток от деления на 10. 3) Вспоминаем наш славный и могучий JS: Код function getEnding(n,w1,w2,w5) { var w; if((n>=11)&(n<=14)) { w=w1; } else { var k=n%10; if(k==1) { w=w1; } else { if((k>=2)&(k<=4)) { w=w2; } else { w=w5; };};}; return w; }; Эта функия возвращает слово в нужной форме. Чтобы её вызвать, используем код Код daysText=getEnding(daysLeft,'день','дня','дней'); Теперь замените в строке Код <b>Осталось</font><font color="#ff6600">:</font> '+daysLeft+' <font color="#ff6600">дней</font> слово " дней " на выражение " '+daysText+' ", т.е. получим: Код <b>Осталось</font><font color="#ff6600">:</font> '+daysLeft+' <font color="#ff6600">'+daysText+'</font> 4) Вроде бы всё! ![]() Добавлено (31 Янв 2016, 18:41:46) Код function getEnding(n,w1,w2,w5) { var w; if((n>=11)&(n<=14)) { w=w5; } else { var k=n%10; if(k==1) { w=w1; } else { if((k>=2)&(k<=4)) { w=w2; } else { w=w5; };};}; return w; }; Элегантный uCoz :)
|
Так куда это вставить?
Код function getEnding(n,w1,w2,w5) { var w; if((n>=11)&(n<=14)) { w=w5; } else { var k=n%10; if(k==1) { w=w1; } else { if((k>=2)&(k<=4)) { w=w2; } else { w=w5; };};}; return w; }; я не понимаю в скриптах просто нашел готовый и хочу изменить |
bit_vlad, вот, объединил весь скрипт:
Код <script> function getEnding(n,w1,w2,w5) { var w; if((n>=11)&(n<=14)) { w=w5; } else { var k=n%10; if(k==1) { w=w1; } else { if((k>=2)&(k<=4)) { w=w2; } else { w=w5; };};}; return w; }; document.write('<span id="ngdat">Осталось</span>') function ojidanieNG() { var today = new Date(); var BigDay = new Date("$OTHER5$"); var timeLeft = (BigDay.getTime() - today.getTime()); var e_daysLeft = timeLeft / 86400000; var daysLeft = Math.floor(e_daysLeft); var e_hrsLeft = (e_daysLeft - daysLeft)*24; var hrsLeft = Math.floor(e_hrsLeft); var e_minsLeft = (e_hrsLeft - hrsLeft)*60; var minsLeft = Math.floor(e_minsLeft); var seksLeft = Math.floor((e_minsLeft - minsLeft)*60); var daysText=getEnding(daysLeft,'день','дня','дней'); if (BigDay.getTime() > today.getTime() ) document.getElementById("ngdat").innerHTML = '<span style="font-size:10pt"><font color=#5D94BE><b>Осталось</font><font color="#ff6600">:</font> '+daysLeft+' <font color="#ff6600">'+daysText+'</font> '+hrsLeft+'<font color="#ff6600">:</font>'+minsLeft+'<font color="#ff6600">:</font>'+seksLeft+'</b></span>' else document.getElementById("ngdat").innerHTML = 'С новым годом!!!' } setInterval("ojidanieNG()", 50) </script> Цитата setInterval("ojidanieNG()", 50) Это слишком частое обновление: 20 раз в секунду. Думаю, 2 раза в секунду будет вполне достаточно. Зачем такая точность? (Честно говоря, и одного раза в секунду как раз достаточно - погрешность не будет превосходить 0,5 сек.) Рекомендую поменять на Код setInterval("ojidanieNG()", 500) или даже на Код setInterval("ojidanieNG()", 1000) Цитата var BigDay = new Date("$OTHER5$"); Если именно до Нового года, зачем зря тратить $OTHER5$? Можно заменить на Код var BigDay = new Date(<? $YEAR$+1 ?>, 0, 1); ...Извините за нескромный вопрос, но зачем Вам так рано отсчёт до Нового года, да ещё и с секундами? ![]() Элегантный uCoz :)
|
| |||
| |||