Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает setInterval (https://javascript.ru/forum/misc/71960-ne-rabotaet-setinterval.html)

Atlas 25.12.2017 02:05

Не работает setInterval
 
Здравствуйте. Есть код отсчёта до определённой даты. Время должно быть серверное. Сам код вставляю в одну из новостей на Джумле.

<span id="doc_time"></span>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script language="javascript" type="text/javascript">
<?php date_default_timezone_set("Etc/GMT+12"); ?>
function clock() {
var d = new Date("<?php echo (date("r")); ?>");
var d1 = new Date("<?php echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 2018)); ?>");
n=Math.floor((d1-d)/1000);
sec=n%60; n=Math.floor(n/60); if(sec<10)sec='0'+sec;
min=n%60; n=Math.floor(n/60); if(min<10)min='0'+min;
hour=n%24; n=Math.floor(n/24);
date_time=n+":"+hour+":"+min+":"+sec;
document.getElementById("doc_time").innerHTML = date_time;
};
clock();

$(document).ready(function() {
setInterval(clock, 1000);
});
</script>


Ну и собственно время отображается, но единожды, setInterval почему-то не обновляет... Причём если убрать вызов функции "clock();", то при обновлении поле будет пустое и только через секунду отобразится время.
Я читал что в setInterval функцию нужно указывать без скобок, но со скобками, без скобок, в кавычках - никак не работает.
Надеюсь на вашу помощь.

рони 25.12.2017 02:23

Atlas,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<span id="doc_time"></span>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>

function clock() {
var d = new Date();
var d1 = new Date(2018, 0, 1, 0, 0, 0, 0);
n=Math.floor((d1-d)/1000);
sec=n%60; n=Math.floor(n/60); if(sec<10)sec='0'+sec;
min=n%60; n=Math.floor(n/60); if(min<10)min='0'+min;
hour=n%24; n=Math.floor(n/24);
date_time=n+":"+hour+":"+min+":"+sec;
document.getElementById("doc_time").innerHTML = date_time;
window.setTimeout(clock,1000)
};


$(function() {
clock()
});
</script>

</body>
</html>

Atlas 25.12.2017 03:49

Так работает, но... мне нужно именно серверное время.
Кстати, заметил ещё, что этот скрипт с отсчётом убивает другой скрипт, который держит открывающуюся панельку слева страницы, в результате чего, её содержимое падает под футер. Если надо, могу показать что там за скрипт.

рони 25.12.2017 04:03

Atlas,
смотрите ошибки в консоли, может вы jquery два раза грузите.


Цитата:

Сообщение от Atlas
мне нужно именно серверное время.

думайте над логикой как изменить var d, иначе нечему "тикать", может придут специалисты помогут.

рони 25.12.2017 04:16

Atlas,
пост №1 строка 8
заменить на
n=Math.floor((d1-d - performance.now())/1000);

Atlas 25.12.2017 04:49

Цитата:

Сообщение от рони (Сообщение 473673)
Atlas,
пост №1 строка 8
заменить на
n=Math.floor((d1-d - performance.now())/1000);

Вот, заменил и всё пошло) Огромное спасибо!
Осталось только с панелькой разобраться...
Тот скрипт начинается на:
(причём первым символом идёт красная точка, называющаяся \ufeff)

$(function(){
    $('.panel').tabSlideOut({
        tabHandle: '.handle',
		pathToTabImage: 'imgbutton.jpg',
        imageHeight: '160px',
        imageWidth: '60px',
        tabLocation: 'left',
        speed: 300,
        action: 'click',
        topPos: '200px',
        fixedPosition: true
    });
});
(function($){


И далее...
Может сможете подсказать в чём может быть конфликт?
P.S.: похоже не работают все остальные скрипты на этой странице, когда я включаю отсчёт.

Atlas 25.12.2017 07:11

Всё, удалил подключение jquery и всё заработало.


Часовой пояс GMT +3, время: 00:43.