Страница 1 из 3
Серверное время (PHP + JS)
Добавлено: 30 окт 2012, 21:08
wierusna
Есть скрипт отсчета времени до заданной временной точки. (За основу берет время с var time=new Date("<? echo date(M);?>,<? echo date(j);?>,<? echo date(Y);?>,<? echo date(G);?>:<? echo date(i);?>:<? echo date(s);?>"); )
Вот листинг
Код: Выделить всё
<script language='javascript' type='text/javascript'>function fulltime () {var time=new Date("<? echo date(M);?>,<? echo date(j);?>,<? echo date(Y);?>,<? echo date(G);?>:<? echo date(i);?>:<? echo date(s);?>");var newYear=new Date("Oct,30,2013,18:58:00"); var totalRemains=(newYear.getTime()-time.getTime()); if (totalRemains>1){ var RemainsSec = (parseInt(totalRemains/1000));var RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));var secInLastDay=RemainsSec-RemainsFullDays*24*3600;var RemainsFullHours=(parseInt(secInLastDay/3600));if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};var secInLastHour=secInLastDay-RemainsFullHours*3600;var RemainsMinutes=(parseInt(secInLastHour/60));if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};var lastSec=secInLastHour-RemainsMinutes*60;if (lastSec<10){lastSec="0"+lastSec}; document.getElementById("RemainsFullDays").innerHTML=RemainsFullDays+"<span id='Rem'> days</span>";document.getElementById("RemainsFullHours").innerHTML=RemainsFullHours+"<span id='Rem'> hours</span>";document.getElementById("RemainsMinutes").innerHTML=RemainsMinutes+"<span id='Rem'> min</span>";document.getElementById("lastSec").innerHTML=lastSec+"<span id='Rem'> sec</span>"; setTimeout('fulltime()',10) } else{document.getElementById("clock").innerHTML="C НОВЫМ ГОДОМ !!!";}}</script> <div id='clou_xs'><div id='clock'>TIME: <span id='RemainsFullDays'></span> <span id='RemainsFullHours'></span> <span id='RemainsMinutes'></span> <span id='lastSec'></span></div></div><script language='javascript'>fulltime();</script>
Время отображается один раз (когда пользователь открывает страницу) то есть отсчет не идет.
Но когда я делаю так (берет время с компьютера пользователя.....не серверное)
отсчет идет динамически (то есть секунды уменьшаются) - есть анимация.
Как исправить это в первом варианте при этом не нагружать сервер (например если одновременно будут сидеть 500 чел и обновлять страницу, сервер ляжет)?
Re: Серверное время (PHP + JS)
Добавлено: 30 окт 2012, 22:35
Serge
Код: Выделить всё
timer = function(){ var time_to = document.getElementById('timer'); time_to.innerHTML--; if(time_to.innerHTML >= 0) { var dsec = time_to.innerHTML % 60; var dmin = ((time_to.innerHTML - dsec) % 3600)/60; var dhour = ((time_to.innerHTML - dsec - dmin*60)/3600) % 24; var dday = (time_to.innerHTML - dsec - dmin*60 - dhour*3600)/86400; if(dday % 10 === 1 && dday !== 11) dday = dday + " день, "; else if(dday % 10 === 2 && dday !== 12) dday = dday + " дня, "; else if(dday % 10 === 3 && dday !== 13) dday = dday + " дня, "; else if(dday % 10 === 4 && dday !== 14) dday = dday + " дня, "; else dday = dday + " дней, "; if(dhour < 10) dhour = "0" + dhour; if(dmin < 10) dmin = "0" + dmin; if(dsec < 10) dsec = "0" + dsec; document.getElementById("time").innerHTML = dday + dhour + ":" + dmin + ":" + dsec; } else { document.getElementById("text").innerHTML = "Отсчет закончен :)"; document.getElementById("time").innerHTML = ""; } setTimeout(timer, 1000);}
А при входе в приложение в div с id time_to записываю разницу между текущим временем и до отсчета (strtotime("2013-12-31 20:00") - time())
Re: Серверное время (PHP + JS)
Добавлено: 31 окт 2012, 17:50
wierusna
Хмм...создал HTML файл и записал в него
Код: Выделить всё
<script language='javascript'> timer = function() { var time_to = document.getElementById('timer'); time_to.innerHTML--; if(time_to.innerHTML >= 0) { var dsec = time_to.innerHTML % 60; var dmin = ((time_to.innerHTML - dsec) % 3600)/60; var dhour = ((time_to.innerHTML - dsec - dmin*60)/3600) % 24; var dday = (time_to.innerHTML - dsec - dmin*60 - dhour*3600)/86400; if(dday % 10 === 1 && dday !== 11) dday = dday + " день, "; else if(dday % 10 === 2 && dday !== 12) dday = dday + " дня, "; else if(dday % 10 === 3 && dday !== 13) dday = dday + " дня, "; else if(dday % 10 === 4 && dday !== 14) dday = dday + " дня, "; else dday = dday + " дней, "; if(dhour < 10) dhour = "0" + dhour; if(dmin < 10) dmin = "0" + dmin; if(dsec < 10) dsec = "0" + dsec; document.getElementById("time").innerHTML = dday + dhour + ":" + dmin + ":" + dsec; } else { document.getElementById("text").innerHTML = "Отсчет закончен :)"; document.getElementById("time").innerHTML = ""; } setTimeout(timer, 1000); } </script> <div id="time_to"></div> <div id="time"></div> <div id="text"></div>
Ничего не выходит....джаваскрипт я не знаю совсем( Помогите пжл записать целый код правильно. И можно сделать что бы отсчет был в днях/часа/минутах/секундах (года и месяца не нужны)
Re: Серверное время (PHP + JS)
Добавлено: 31 окт 2012, 19:03
Serge
wierusna писал(а):Ничего не выходит....джаваскрипт я не знаю совсем( Помогите пжл записать целый код правильно. И можно сделать что бы отсчет был в днях/часа/минутах/секундах (года и месяца не нужны)
Ну надо бы поучить его, что ли.
Добавьте timer(); перед окончанием скрипта.
Re: Серверное время (PHP + JS)
Добавлено: 31 окт 2012, 22:10
wierusna
Так? Не работает...... ( Я не могу понять, где нужно установить время (до какого промежутка будет отсчет)
Код: Выделить всё
else { document.getElementById("text").innerHTML = "Отсчет закончен :)"; document.getElementById("time").innerHTML = ""; } setTimeout(timer, 1000); } timer(); </script>
Re: Серверное время (PHP + JS)
Добавлено: 31 окт 2012, 23:16
Serge
wierusna писал(а):...
Код: Выделить всё
<head><script>атата ололо</script></head><body><div id="timer" style="display:none">100500</div><!--Время в секундах до финальной точки--><div id="time"></div><div id="text"></div></body>
Re: Серверное время (PHP + JS)
Добавлено: 31 окт 2012, 23:51
wierusna
Блин хоть убей....не работает((((((( Вам сложно написать код? Или вы из принципа не пишите его)) что бы меня помучить?
Код: Выделить всё
<head><script> timer = function() { var time_to = document.getElementById('timer'); time_to.innerHTML--; if(time_to.innerHTML >= 0) { var dsec = time_to.innerHTML % 60; var dmin = ((time_to.innerHTML - dsec) % 3600)/60; var dhour = ((time_to.innerHTML - dsec - dmin*60)/3600) % 24; var dday = (time_to.innerHTML - dsec - dmin*60 - dhour*3600)/86400; if(dday % 10 === 1 && dday !== 11) dday = dday + " день, "; else if(dday % 10 === 2 && dday !== 12) dday = dday + " дня, "; else if(dday % 10 === 3 && dday !== 13) dday = dday + " дня, "; else if(dday % 10 === 4 && dday !== 14) dday = dday + " дня, "; else dday = dday + " дней, "; if(dhour < 10) dhour = "0" + dhour; if(dmin < 10) dmin = "0" + dmin; if(dsec < 10) dsec = "0" + dsec; document.getElementById("time").innerHTML = dday + dhour + ":" + dmin + ":" + dsec; } else { document.getElementById("text").innerHTML = "Отсчет закончен :)"; document.getElementById("time").innerHTML = ""; } setTimeout(timer, 1000); } timer(); </script></head> <body> <div id="timer" style="display:none">100500</div><!--Время в секундах до финальной точки--> <div id="time"></div> <div id="text"></div> </body>
Re: Серверное время (PHP + JS)
Добавлено: 01 ноя 2012, 09:18
Serge
wierusna писал(а):Блин хоть убей....не работает((((((( Вам сложно написать код? Или вы из принципа не пишите его)) что бы меня помучить?
Ага.
вместо просто timer() и работает. Только что проверил. Но надо jQuery подключать.
Есть еще второй вариант - делать setTimeout(timer,1000), но это не есть правильно, он все равно может запуститься до загрузки страницы.
Re: Серверное время (PHP + JS)
Добавлено: 01 ноя 2012, 15:23
wierusna
Спасибо, заработало....
Только вот похоже вы не поняли сути) или я так плохо объясняю.
Задача такая:
Отображать сколько времени осталось до конца аукциона (например)
Время должно быть серверным а не клиентским т.к. у двух людей, живущих в разных часовых поясах время будет показано по разному.
Например:
Человек живущий в Китае и человек живущий в России зашли на страницу и видят, что до конца осталось 3 часа. Через час они вновь зашли на страницу и удивили, что что до конца осталось 2 часа. При этом разница в 2-5 сек допустима.
Такое возможно сделать?
Re: Серверное время (PHP + JS)
Добавлено: 01 ноя 2012, 17:48
Serge
wierusna писал(а):Спасибо, заработало....
Только вот похоже вы не поняли сути) или я так плохо объясняю.
Задача такая:
Отображать сколько времени осталось до конца аукциона (например)
Время должно быть серверным а не клиентским т.к. у двух людей, живущих в разных часовых поясах время будет показано по разному.
Например:
Человек живущий в Китае и человек живущий в России зашли на страницу и видят, что до конца осталось 3 часа. Через час они вновь зашли на страницу и удивили, что что до конца осталось 2 часа. При этом разница в 2-5 сек допустима.
Такое возможно сделать?
Я Вам привел пример скрипта, подставив в который время в секундах до окончания - он будет считать до этого момента. Я это делаю банальным post запросом при входе пользователя, полученный результат записываю в $('#timer') (сервер выдает уже время в секундах, ему не сложно сделать strtotime(дата) - time()).