в скрипте цикл switch() работает неправильно

123
Dreammaker
На сайте с 20.04.2006
Offline
569
#11
PSK:
что-то у меня по-прежнему всё время выдает "дней" для всех чисел )

Не не для всех :) Для некоторых ещё и дня. Завтра внимательней посмотрю - задача заинтересовала :)

Dreammaker
На сайте с 20.04.2006
Offline
569
#12


<script language="JavaScript">
<!--

today = new Date()
nextDate = new Date("October 27, 2006")
msPerDay = 24*60*60*1000;
daysLeft = Math.round((nextDate.getTime() - today.getTime())/msPerDay);
dayname=""
ds=""+daysLeft
dd=parseInt(ds.substr(ds.length-1))
if(daysLeft>4&&daysLeft<21)dayname=" дней"
else
if(dd==1)dayname=" день"
else
if(dd==2||dd==3||dd==4)dayname=" дня"
else dayname=" дней"
document.write("До нового года осталось "+daysLeft+dayname+"!!!");

//-->
</script>

взято отсюда http://www.javaportal.ru/javascript/examples/dayleft.html

и вроде работает.. Но с регексами мне больше идея нравится, хотя в основу положено тоже самое..

PK
На сайте с 24.10.2006
Offline
99
PSK
#13
Dreammaker:
Не не для всех :) Для некоторых ещё и дня. Завтра внимательней посмотрю - задача заинтересовала :)

вот и меня тоже :) по-моему самый простой вариант это:

654 - 600 -50 = 4. и для case 4: уже сделать вывод.

600 можно было бы получить как 654/100*100, если бы был тип int. но js присваивает float по ходу.

еще у Коли Дубра решение интересное

PK
На сайте с 24.10.2006
Offline
99
PSK
#14

ребята спасибо большое. форум это великая штука!

Коля Дубр
На сайте с 02.03.2005
Offline
153
#15

Что-то мне не спится +) Вот та же функция, но в "bookmarklet style" =)


function getDays(x) {
var un = x - 10 * Math.floor(x / 10);
var de = ((x - 100 * Math.floor(x / 100)) - un) / 10;
return (un == 1) ? ((de != 1) ? 'день' : 'дней') : ((un > 1 && un < 5) ? ((de != 1) ? 'дня' : 'дней') : 'дней');
}

Тут без всяких преобразований, работаем только с числами.

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
Mmonger
На сайте с 01.12.2005
Offline
165
#16

x - x/100*100 - ( x - x/100*100)/10*10 - это выражение возвращает 0 всегда.

x - x/100*100 - из 654, к примеру, не получится 600. Здесь лучше использовать получение остатка от деления, к примеру: x - x%100

Всё будет хорошо, но мы приложим усилия!
iexpert
На сайте с 01.09.2005
Offline
184
#17

Э, поздно но все же:

function rus_str_count($n, $one, $two, $five)

{
if(($n > 4 && $n < 21) || $n%10 > 4 || $n%10 == 0) return $n.' '.$five;
else if($n%10 > 1) return $n.' '.$two;
else return $n.' '.$one;
}

$str_day = rus_str_count(floor($day), 'день', 'дня', 'дней');

$day - целое число

p.s. понятно так же работает и для рублей и для копеек и так далее

Бойтесь ваших желаний, ибо они могут исполниться
dkameleon
На сайте с 09.12.2005
Offline
386
#18

Не слишком ли все всё усложняют?

В коде топикстартера достаточно заменить одно:

<script language="javascript">
d0 = new Date('August 8, 2008');
d1 = new Date();
dt = (d0.getTime() - d1.getTime()) / (1000*60*60*24);

var x = Math.round(dt);

switch ( x % 10 )
{
case 9: document.write( Math.round(dt) + " дней"); break;
case 8: document.write( Math.round(dt) + " дней"); break;
case 7: document.write( Math.round(dt) + " дней"); break;
case 6: document.write( Math.round(dt) + " дней"); break;
case 5: document.write( Math.round(dt) + " дней"); break;
case 4: document.write( Math.round(dt) + " дня"); break;
case 3: document.write( Math.round(dt) + " дня"); break;
case 2: document.write( Math.round(dt) + " дня"); break;
case 1: document.write( Math.round(dt) + " день"); break;
case 0: document.write( Math.round(dt) + " дней"); break;

default:document.write( Math.round(dt) + " дняя");
};
</script>
Дизайн интерьера (http://balabukha.com/)
dkameleon
На сайте с 09.12.2005
Offline
386
#19
iexpert:
Э, поздно но все же:

Мы жабаскрипт пилим :)

iexpert
На сайте с 01.09.2005
Offline
184
#20
dkameleon:
Мы жабаскрипт пилим :)

действительно... :-)

бутылочка хорошего вина мешает восприятию.

Переложите это в js и будет все ок.

мне уж сори лениво :-)

копи паст и что то там думать - разные вещи

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий