Когда взял время на php с сервера - таймер перестал сам тикать

Рейтинг: -1Ответов: 1Опубликовано: 22.02.2015
 <!DOCTYPE HTML> <html> <head> <meta
 http-equiv="Content-Type"
 content="text/html; charset=utf-8" />
 <link rel="shortcut icon"
 href="favicon.ico"
 type="image/x-icon"> <title>Время
 намаза по КЧР</title>

 <script type="text/javascript">

 g=<?php echo date("Y"); ?>;   // тут я
 беру год который на сервере y_u_1=new
 Date(g, 11,1,06, 05); // дата события 
 function on() {                                                      //
 эта функция которая отвечает за то
 чтобы таймер начала работать через 5
 секунд timeoutId =
 setInterval(f_y_u_1, 5000);           
 // эта функция которая отвечает за то
 чтобы таймер начала работать через 5
 секунд
 clearInterval(id);                                             // эта
 функция которая отвечает за то чтобы
 таймер начала работать через 5 секунд

 function f_y_u_1() { v=y_u_1; td = new
 Date(<?= (time() * 1000) ?>); //ДЕЛО В
 ТОМ ЧТО КОГДА ТУТ БРАЛОСЬ ВРЕМЯ НА
 JAVA SCRIPT - ШЕЛ ТАЙМЕР А ТЕПЕРЬ ОН
 ПРОСТО СТОИТ

 td = Math.floor((v-td)/1000);   
 tsec=td%60;  td=Math.floor(td/60); 
 if(tsec<10)tsec='0'+tsec;  
 tmin=td%60;  td=Math.floor(td/60); 
 if(tmin<10)tmin='0'+tmin;  tj=td%24;  
 td=Math.floor(td/24);  if
 (td>0){tmr=td +" дней "+ tj+" чаc.
 "+tmin+" мин. "+tsec+" c.";}  else {if
 (tj>0){tmr=tj+" чаc. "+tmin+" мин.
 "+tsec+" c.";}else{if
 (tmin>0){tmr=tmin+" мин. "+tsec+"
 c.";}   else{if (tsec>0){tmr=tsec+"
 c.";} 
 else{f_y_u_1()};};};};document.getElementById('t').innerHTML=tmr;window.setTimeout("f_y_u_1()",1000);};
 }   </script>    </head> <body> 
 <script type="text/javascript">  
 on();   </script>

  <p style="font-size:30px" align="">
 До события   осталось: <br/> <br/>
 <span id="t"  ></span> </p>    </body>
 </html>

Обновление

Сейчас речь будет идти примерно о 28 строчке. Так вот там td = new Date(<?= (time() * 1000) ?>). Прежде было так: td = new Date() - и часы на сайте тикали, а теперь они просто стоят, пока страницу не обновишь, время не меняется, а раньше таймер шел онлайн.

Ответы

▲ 1

Ваш код невозможно прочитать! Но проблема состоит в том, что переменная td в 28 строчке всегда имеет одно и то же значение все время выполнения скрипта. Чтобы избежать этого, нужно вынести серверное время за пределы функции, а внутри самостоятельно уже изменять значение времени на одну секунду. Ниже привожу полностью рабочий вариант

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <title>Время намаза по КЧР</title>

    <script type="text/javascript">

        var y_u_1 = new Date(<?php echo date("Y"); ?>, 11, 1, 06, 05); // дата события

        var initial_time = <?php echo time() * 1000; ?>;

        var intervalId = 0;

        var delay = 1000;

        function on() {

            setTimeout(f_y_u_1, 5000);

            function f_y_u_1() {

                var v, td, tsec, tmin, tj, tmr;

                v = y_u_1;
                td = new Date(initial_time);

                //ДЕЛО В        ТОМ ЧТО КОГДА ТУТ БРАЛОСЬ ВРЕМЯ НА                                                JAVA SCRIPT - ШЕЛ ТАЙМЕР А ТЕПЕРЬ ОН                                                                                    ПРОСТО СТОИТ

                td = Math.floor((v - td) / 1000);
                tsec = td % 60;
                td = Math.floor(td / 60);
                if ( tsec < 10 ) {
                    tsec = '0' + tsec;
                }
                tmin = td % 60;
                td = Math.floor(td / 60);
                if ( tmin < 10 ) {
                    tmin = '0' + tmin;
                }
                tj = td % 24;
                td = Math.floor(td / 24);
                if ( td > 0 ) {
                    tmr = td + " дней " + tj + " чаc." + tmin + " мин." + tsec + " c.";
                }
                else {
                    if ( tj > 0 ) {
                        tmr = tj + " чаc. " + tmin + " мин." + tsec + " c.";
                    }
                    else {
                        if ( tmin > 0 ) {
                            tmr = tmin + " мин. " + tsec + " c.";
                        }
                        else {
                            if ( tsec > 0 ) {
                                tmr = tsec + " c.";
                            }
                            else {
                                f_y_u_1();
                            }
                        }
                    }
                }
                document.getElementById('t').innerHTML = tmr;

                initial_time += delay;

                if ( !intervalId ) {

                    intervalId = setInterval(f_y_u_1, delay);
                }
            }

        }
    </script>
</head>
<body>
<p style="font-size:30px" align="">
    До события осталось: <br/> <br/>
    <span id="t"></span>
</p>

<script type="text/javascript">
    on();
</script>
</body>
</html>