Страница 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>  

Время отображается один раз (когда пользователь открывает страницу) то есть отсчет не идет.
Но когда я делаю так (берет время с компьютера пользователя.....не серверное)

Код: Выделить всё

 var time=new Date(); 

отсчет идет динамически (то есть секунды уменьшаются) - есть анимация.
Как исправить это в первом варианте при этом не нагружать сервер (например если одновременно будут сидеть 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 писал(а):Блин хоть убей....не работает((((((( Вам сложно написать код? Или вы из принципа не пишите его)) что бы меня помучить?
Ага.

Код: Выделить всё

$(document).ready(function(){     timer();    });
вместо просто 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()).