JavaScript обратный отчет времени

Lukin

Новичок
JavaScript обратный отчет времени

В MYSQL базе записано время конца мероприятия,мне надо,что бы на экране выводилось время оставшиеся до конца
мероприятия... как это сделать?
 

Lukin

Новичок
Да вопрос не в том...Как сделать на странице часы,которые бы показывали,сколько осталось времени до определенного часа?
 

kruglov

Новичок
Вам идею или готовый скрипт?
Насчет идеи - даже не знаю, она настолько на поверхности...
Насчет скрипта - влом, да и гугль наверняка по заголовку вашей темы полно советов найдет.
 

Avenus

Under Glory Yield
Ставишь div на странице со временем и пишешь функцию на javascript в которую передаешь 2 параметра: сегодняшнюю дату и окончательную дату в формате timestamp.
В скрипте вычитаешь их и получаешь время в unixtime, которое преобразовываешь в необходимый формат и по таймауту в 1 сек обновляешь div на странице со временем.

Не забудь использовать UTC даты и переход на летнее время и обратно. Пример посмотри: http://www.kinopoisk.ru/level/1/film/111543/
Там же и скрипт можешь вытащить :)
 

-SkyNet-

Новичок
есть готовые скрипты обратного отсчета

самостоятельно решается 2мя шагами:
1. получить разность в часах, минутах и секундах
2. рекурсивная функция, перезапускающаяся с setTimeout("plusSecond()",1000) и условием что если секунд 59, то не прибавляем 1, а устанавливаем 00 и прибавляем к минутам, и то же самое для счетчика кол-ва часов
 

dimagolov

Новичок
-SkyNet-, не нужно писать бред...

1. запуск JS кода через приблизительно равные интервалы делается через setInterval()
2. вычисление оставшегося или текущего времени производиться через создание объекта типа Date и манипуляций с ним.

за подробностями реализации - в ман. только скажу, что передавать параметром в setInterval или setTimeout надо ссылку на объект ф-ю, а не на строку с кодом, чтобы не вызывать неявно коструктор типа Function.

п.с. прежде чем возражать, разберитесь в том, как в однотредовом интерпретаторе JS обрабатываются асинхронные события и строится очередь исполнения.
 

-SkyNet-

Новичок
уважаемый dimagolov, перед тем как публично называть те или иные выкладки бредом, убедитесь что вы сами их поняли. поясняю

ман по setTimeout и setInterval:

The setInterval call has similar arguments, but instead of just executing the given code once, it executes it over and over again, using the second argument as the amount of time to wait between executions.

setTimeout("alert('hi!');", 500);
setInterval("alert('hi!');", 500);

тут четко написано: executing the given code
покажите мне, где тут указатель на объект?
"alert('hi!');" в параметре этих ф-ций - указатель?? интересно....

вычисление разницы времени какими-то другими методами, кроме помощи объекта Date мной и не предлагались

насчет рекурсивных функций - опять же, что в лоб что по лбу - либо создаете цикл сами, либо это делает setInterval, по вкусу

а вообще, считать собственное видение решение единственным и неоспоримым - самоуверенно и неуважительно к сообществу программистов. копирка с мана, кстати, не есть идеальное решение, а всего лишь частное решение, не лишенное смысла

имхо
 

dimagolov

Новичок
-SkyNet-, в JS везде, где параметром передается код строкой создается анонимная ф-я вызовом конструктора new Function. Фактически, это вызов незабвенного eval.

НО никто не заставляет устраивать такие танцы, можно просто передать ссылку на ф-ю, которую надо вызвать. так как обычно вызвать через setTimeout или setInterval надо нечто более интелектуальное, чем "alert('hi!');", то разумных причин передавать первым параметром строку нет.

про "чем лучше один вызов setInterval от нескольких тысяч вызовов setTimeout" (кроме очевидной экономии на тысячах ненужных вызовов setTimeout, кол-во вызовов по таймеру совпадет) ты поймешь, когда
разберитесь в том, как в однотредовом интерпретаторе JS обрабатываются асинхронные события и строится очередь исполнения.
 

-SkyNet-

Новичок
по setInterval все получается верно, только если цикл нужен именно бесконечный, - иначе бы и не было фйнкции. а в конкретной задаче, как я понимаю, отрицательное время не нужно, а вполне уместно по достижению нулевой разницы запускать некий финальный сценарий, но это детали

ну и если нужно вызвать ф-цию без параметров в setInterval/setTimeout, то тогда конечно ссылка подходит, но имхо это скорее частный случай, а в остальных - неинтеллектуальный alert('hi') технически ведет себя также, как и все остальные возможные вызовы
 

dimagolov

Новичок
-SkyNet-, что ты в параметрах передавать собрался? строки? или что? ты вообще представляешь, в каком контексте будет выполнен тот код, что ты передашь строкой?
ты про замыкания что-нибудь слышал?

п.с. любые интервалы-таймауты можно останавливать, если ты не в курсе :)
 

-SkyNet-

Новичок
dimagolov
могу повториться, что все манипуляции циклом - вопрос вкуса и привычки, не стоит наверное на этом зацикливаться? setTimeout и setInterval вместе везде описаны именно поэтому

про передачу переменных тут много тонкостей. надо понимать, что передается строкой.
в случае setTimeout("myFuncs(myVar)",1000); будет передано имя переменной, а при setTimeout("myFuncs("+myVar+")",1000); будет передано ее значение

замыкания использую по необходимости, штука удобная, но тут они причем?

вместо
setTimeout("myFunc(myVar)",1000);
использовать
setTimeout("function(inVar){return myFunc(inVar)}(myVar)",1000);
??

если переменную надо передать, ее передают по имени (если в нужно время она гарантированно доступна и содержит что надо), либо по значению


п.с. про остановку цикла - память у меня вообще-то хорошая, спасибо :р

п.п.с. соискателям в помощь: http://javascript.ru/tutorial/basic/closure
 

dimagolov

Новичок
замыкание это
setTimeout(function () {myFunc(myVar);},1000);

про "setTimeout и setInterval вместе везде описаны именно поэтому"

есть принципиальная разница в том, как в попадают в очередь исполнения блоки вызванные setTimeout и setInterval. когда разберешься в том, как работает очередь исполнения, поймешь, что я имею в виду.
 
Сверху