Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2019, 15:32
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Как заставить работать скрипт по серверному времени ?
Здравствуйте
Как заставить эти 2 скрипта работать по серверному времени? В JS не селен, если можно ответы писать в более развернутом виде.
Заранее спасибо.
var delay_popup = 2000;
    var msg_pop = document.getElementById('msg_pop');
    setTimeout("document.getElementById('msg_pop').style.display='block';document.getElementById('msg_pop').className += 'fadeIn';", delay_popup);

<div id="msg_pop">
<span class="msg_close" onclick="document.getElementById('msg_pop').style.display='none'; return false;">X</span>

<div id="countdown" ></div>
<div id="countdown1" ></div>

alert(<?php echo time() * 1000 ?> +'\n' + new Date())

var d = [5,4,3,2,1,0,7,6,];
var today = new Date();
var end = new Date(today.getFullYear(),today.getMonth(),today.getDate()+ d[today.getDay()], 15, 00, 00);
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
   if (distance < 0) {
           document.getElementById("countdown").innerHTML = "Следующий синхрон через неделю.";;
            return;
        }
	
        var days = Math.floor(distance / _day);
        var hours = Math.floor((distance % _day) / _hour);
		if (hours < 10) hours = '0' + hours;
        var minutes = Math.floor((distance % _hour) / _minute);
		if (minutes < 10) minutes = '0' + minutes;
        var seconds = Math.floor((distance % _minute) / _second);
		if (seconds < 10) seconds = '0' + seconds;
	
        document.getElementById('countdown1').innerHTML = "До начала синхрона осталось. "+ days +" дн. "+ hours +":"+ minutes +":"+ seconds +"";
    }

    timer = setInterval(showRemaining, 1000);

<div id='relo' style="display: none; position: fixed;  background-color: red; border: 1px solid lightblue; width: 250px; padding: 10px;bottom: 100px;
    right: 56px;border-radius: 12px;text-align: center;"><h2>Игра начинается!!!!<br><br><br> Страница обновится автоматически</h2></div>
window.onload = function() {
  setInterval(function() {
    var date = new Date();
    if (date.getDay()==5 && date.getHours()==15 && date.getMinutes()==00 && date.getSeconds()==03) {
    setTimeout ("$('#relo').show('drop');", 1000);
	 setTimeout("  location.reload(true)", 5000 );



    }
  },1000);
};
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2019, 15:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

Получить смещение серверного времени относительно utc и уже на основе этих данных корректировать клиентское время.
Не забудьте, что у клиента тоже есть определенное смещение относительно utc.
Ответить с цитированием
  #3 (permalink)  
Старый 22.03.2019, 15:41
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от Nexus Посмотреть сообщение
Получить смещение серверного времени относительно utc и уже на основе этих данных корректировать клиентское время.
Не забудьте, что у клиента тоже есть определенное смещение относительно utc.
Спасибо за ответ. Можно на примере этого кода показать как должно работать? просто уже третий день борюсь с этим уже голова кипит.
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2019, 15:44
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,726

ddro3doff, только если вы комментарии к коду добавите или объясните что хотите получить.
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2019, 15:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

alert(<?php echo time() * 1000 ?> +'\n' + new Date()) - не time(), а date('z'), которое суммировать с часовым поясом клиента, и на результат которого корректировать создание даты new Date(). Сервер и клиент возвращают смещение с противоположными знаками, что и будет использовано при коррекции.
Ответить с цитированием
  #6 (permalink)  
Старый 22.03.2019, 15:56
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

<div id='relo' style="display: none; position: fixed;  background-color: red; border: 1px solid lightblue; width: 250px; padding: 10px;bottom: 100px;
    right: 56px;border-radius: 12px;text-align: center;"><h2>Игра начинается!!!!<br><br><br> Страница обновится автоматически</h2></div>


<script>
window.onload = function() {
  setInterval(function() {
    var date = new Date();
    if (date.getDay()==5 && date.getHours()==15 && date.getMinutes()==00 && date.getSeconds()==03)///В указанное время должно показаться div окно с текстом о перезагрузке страницы
 {
    setTimeout ("$('#relo').show('drop');", 1000);
	 setTimeout("  location.reload(true)", 5000 );



    }
  },1000);
};</script>

Смысл такой
На сайте в указанное время должно появится окно с текстом о перезагрузке страницы и через 5 секунд страница должна перезагрузиться. Скрипт должен выполнятся 1 раз , только в пятницу и только в указанное время
Ответить с цитированием
  #7 (permalink)  
Старый 22.03.2019, 16:03
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от Nexus Посмотреть сообщение
ddro3doff, только если вы комментарии к коду добавите или объясните что хотите получить.




<script type="text/javascript">
var delay_popup = 2000;
var msg_pop = document.getElementById('msg_pop');
setTimeout("document.getElementById('msg_pop').sty le.display='block';document.getElementById('msg_po p').className += 'fadeIn';", delay_popup);
</script>
<div id="msg_pop">// скрипт для скрытия див окна
<span class="msg_close" onclick="document.getElementById('msg_pop').style. display='none'; return false;">X</span>
<div id="countdown" ></div>/// окно с текстом при достижении указанного времени
<div id="countdown1" ></div>/// окно с текстом если время еще не пришло

<script>

var d = [5,4,3,2,1,0,7,6,];/// определяет день недели "Пятница" - конечная дата для счетчика
var today = new Date();
var end = new Date(today.getFullYear(),today.getMonth(),today.ge tDate()+ d[today.getDay()], 15, 00, 00);/ Время в которое должен показаться текст
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;

function showRemaining() {
var now = new Date();
var distance = end - now;
if (distance < 0) {
document.getElementById("countdown").innerHTML = "Следующий синхрон через неделю.";;/// текст для окна countdown
return;
}

var days = Math.floor(distance / _day);
var hours = Math.floor((distance % _day) / _hour);
if (hours < 10) hours = '0' + hours;
var minutes = Math.floor((distance % _hour) / _minute);
if (minutes < 10) minutes = '0' + minutes;
var seconds = Math.floor((distance % _minute) / _second);
if (seconds < 10) seconds = '0' + seconds;

document.getElementById('countdown1').innerHTML = "До начала синхрона осталось. "+ days +" дн. "+ hours +":"+ minutes +":"+ seconds +"";///текст для окна countdown
}

timer = setInterval(showRemaining, 1000);

</script>

Отчет времени до события. Когда время события равно времени на сервер должен выводится текст.
На сайте каждую пятницу в 19 00 проходит игра. Это напоминалка для пользователей сколько дней и часов осталось до игры.

Последний раз редактировалось ddro3doff, 22.03.2019 в 16:20.
Ответить с цитированием
  #8 (permalink)  
Старый 22.03.2019, 16:05
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от laimas Посмотреть сообщение
alert(<?php echo time() * 1000 ?> +'\n' + new Date()) - не time(), а date('z'), которое суммировать с часовым поясом клиента, и на результат которого корректировать создание даты new Date(). Сервер и клиент возвращают смещение с противоположными знаками, что и будет использовано при коррекции.
Эту строчку случайно скопировал, пробовал своими силами синхронизировать...... не получилось

Последний раз редактировалось ddro3doff, 22.03.2019 в 16:07.
Ответить с цитированием
  #9 (permalink)  
Старый 22.03.2019, 16:11
Аспирант
Отправить личное сообщение для ddro3doff Посмотреть профиль Найти все сообщения от ddro3doff
 
Регистрация: 22.03.2019
Сообщений: 47

Сообщение от Nexus Посмотреть сообщение
ddro3doff, только если вы комментарии к коду добавите или объясните что хотите получить.
В принципе все скрипты работают как нужно, токо по времени юзера, а мне нужно что бы таймер отсчитывал от серверного времени или от какого нибудь стороннего сервера.И вызывал всплывающие она тоже от серверного времени

Последний раз редактировалось ddro3doff, 22.03.2019 в 16:16.
Ответить с цитированием
  #10 (permalink)  
Старый 22.03.2019, 16:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

ddro3doff, уясните простую вещь (и хорошо бы для закрепления самому "пощупать" скриптом, что сие означает) - сервер возвращает временную зону западнее UTC как отрицательное число, а восточнее положительные. А клиент эти значения возвращает с противоположным знаком.

Отдавая страницу клиенту отдайте временную зону сервера, и суммируйте с временной зоной клиента:

var tZ = <?=date('Z') * 1000?> + (new Date).getTimezoneOffset() * 60 * 1000;


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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Handlebars + React.js: как заставить работать? The_Nobody Библиотеки/Тулкиты/Фреймворки 4 29.09.2015 12:24
Как заставить работать среди php(wp) Takun Общие вопросы Javascript 0 10.12.2014 16:47
Новичок, подскажите как оптимизировать скрипт. asdds AJAX и COMET 4 05.12.2014 23:29
как заставить работать часы d4a1 Общие вопросы Javascript 2 04.08.2011 21:29
А как зделать скрипт, чтобы например скрипт 1 заменялся скриптом 2? yura371 Общие вопросы Javascript 3 06.01.2009 22:40