|
Форум » uCoz » Вопросы по Js и Jquery » Помогите с JS countdown (Пишу скрипт countdown но существуют погрешности) |
Помогите с JS countdown |
off-line Добавлено: 2013-Мар-17 - 15:17 | Сообщение #1
Добрый час, форумчане. Пишу скрипт таймера на JS и DIV структуре. В JS я не гуру и не профи. Но по какой-то из причин, вероятно моё непонимание временных просторов привело меня к неправильной работе таймера.
Если я ставлю сегодняшнюю дату, допустим 17:03:2013 и время 16:00 PM, то работа его уже завершается, а время ещё 15:00, т.е. таймер должен работать ещё час. Если ставлю другую дату, отсчёт идёт, но он неверный. Поставим дату 18:03:2013 и таймер показывает 485 дней до этой даты. Хотя я поставил "завтрашнее" число. Выкладываю код скрипта. Кстати, этот таймер можно использовать неограниченное количество раз. Код <style> #clock1{ font-size: 12px; font-family:"Arial Black", Gadget, sans-serif; text-align:center;} </style> <div id="clock1">[clock1]</div> <script language="JavaScript"> StartCountDown("clock1","17/03/2013 :00 AM -0400") function StartCountDown(myDiv,myTargetDate) { var dthen = new Date(myTargetDate); var dnow = new Date(); ddiff = new Date(dthen-dnow); gsecs = Math.floor(ddiff.valueOf()/1000); CountBack(myDiv,gsecs); } function Calcage(secs, num1, num2) { s = ((Math.floor(secs/num1))%num2).toString(); if (s.length < 2) { s = "0" + s; } return (s); } function CountBack(myDiv, secs) { var DisplayStr; var DisplayFormat = "Дней %%D%% : Часов %%H%% : Минут %%M%% : Секунд %%S%%"; DisplayStr = DisplayFormat.replace(/%%D%%/g, Calcage(secs,86400,100000)); DisplayStr = DisplayStr.replace(/%%H%%/g, Calcage(secs,3600,24)); DisplayStr = DisplayStr.replace(/%%M%%/g, Calcage(secs,60,60)); DisplayStr = DisplayStr.replace(/%%S%%/g, Calcage(secs,1,60)); if(secs > 0) { document.getElementById(myDiv).innerHTML = DisplayStr; setTimeout("CountBack('" + myDiv + "'," + (secs-1) + ");", 990); } else { document.getElementById(myDiv).innerHTML = "Предложение завершено"; } } </script> |
off-line Добавлено: 2013-Мар-17 - 15:42 | Сообщение #2
UndeadLive, В яваскрипт числа идут немного не так как унас у js 0-это 1, 1- это 2, 2 - это 3 и т.д.., просто уменьши число на один и будет работать - это по поводу таймера.
Сообщение отредактировал MonaX - Воскресенье, 2013-Мар-17, 15:44
|
off-line Добавлено: 2013-Мар-18 - 10:22 | Сообщение #3
MonaX, насколько я понял, здесь тоже нужно менять переменные?
Код var DisplayFormat = "Дней %%D%% : Часов %%H%% : Минут %%M%% : Секунд %%S%%"; DisplayStr = DisplayFormat.replace(/%%D%%/g, Calcage(secs,86400,100000)); DisplayStr = DisplayStr.replace(/%%H%%/g, Calcage(secs,3600,24)); DisplayStr = DisplayStr.replace(/%%M%%/g, Calcage(secs,60,60)); DisplayStr = DisplayStr.replace(/%%S%%/g, Calcage(secs,1,60)); if(secs > 0) Насколько я понял в "secs" - 86400 - это количество секунд в одном дне. А 100000 это что? Количество дней в году или как? Поменял значение "StartCountDown("clock1","16/02/2012 3:30 AM -0400")" на -1 к каждому числу, толку нет. По таймеру до 16:30 по МСК мне остаётся "Дней 15 : Часов 21 : Минут 46 : Секунд 25" Что за бред. Мне кажется здесь дело в DisplayStr значениях. MonaX, можешь ли дать сразу кусок кода с правками. Будь так любезен. ![]() А если можно - то как-нибудь связаться по skype.theblackpaperstudio Добавлено (18.03.2013, 10:22:22) |
| |||
| |||