Javascript.RU

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

Часы с единым временем
<script type="text/javascript">
 
function moscowTime() {
	var d = new Date();
	d.setHours( d.getHours() + 3, d.getMinutes() + d.getTimezoneOffset()  );
	return d.toTimeString().substring(0,8);
}
 
onload = function () {
  setInterval(function () {
    document.getElementById("txt").innerHTML = moscowTime();
  }, 100);
}
</script>


Хочу поставить часы на сайт, но чтобы у всех было единое время, использую код, но с ним такое не получается, как я понимаю препятствует new Date(); соотвественно если я на компе время поменяю, оно и там изменится, как этому можно препятствовать?
Ответить с цитированием
  #2 (permalink)  
Старый 13.08.2016, 14:50
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Серверное время передавай.
Ответить с цитированием
  #3 (permalink)  
Старый 13.08.2016, 15:02
Интересующийся
Отправить личное сообщение для singmen Посмотреть профиль Найти все сообщения от singmen
 
Регистрация: 20.07.2014
Сообщений: 15

а поподробнее можно?
Ответить с цитированием
  #4 (permalink)  
Старый 13.08.2016, 15:18
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

singmen, если требуется синхронизировать чеса клиентов по времени сервера, то отдавайте в JS смещение временной зоны сервера, на которую корректировать смещение клиента - часы у клиентов будут идти по времени сервера. Как передать это смещение, зависит от серверного языка. На РНР, это так:

date("Z"); //в секундах со знаком
Ответить с цитированием
  #5 (permalink)  
Старый 13.08.2016, 15:40
Интересующийся
Отправить личное сообщение для singmen Посмотреть профиль Найти все сообщения от singmen
 
Регистрация: 20.07.2014
Сообщений: 15

сделал в таком виде:

<span id="vern_time">
<?
echo date("H").":"; 
echo date("i").":";
echo date("s");
 ?></span>

 <script>
setInterval(function () {$('#tm').load('/do/time.php #vern_time');}, 100);
</script>
<span id="tm"></span>


но получается таким образом я ддосю сервер, бывает за 6-12 секунд за раз прыгает
Ответить с цитированием
  #6 (permalink)  
Старый 13.08.2016, 16:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не так. Смещение временной зоны на клиенте возвращается в минутах, на сервере, если РНР, в секундах.

Если у вас РНР, отдавая страницу клиенту дописывайте в конце нее (перед закрывающим тегом body):

<script>var sZone = <?=date("Z") * 1000?></script>


Сервер и клиент возвращают смещение часового пояса с разными знаками по разную сторону от Гринвича. Поэтому плюсуя к смещению клиента смещение сервера получаем смещение на которое нужно скорректировать часы клиента, например:

var Zone = new Date().getTimezoneOffset() * 60 * 1000 + sZone;
var watch = new Date((new Date).getTime() + Zone); //время которое устанавливается в часах

Последний раз редактировалось laimas, 13.08.2016 в 17:12.
Ответить с цитированием
  #7 (permalink)  
Старый 13.08.2016, 20:19
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от singmen Посмотреть сообщение
соотвественно если я на компе время поменяю, оно и там изменится
laimas соотвественно если он на компе часовой пояс поменяет, он и там изменится...
Ответить с цитированием
  #8 (permalink)  
Старый 13.08.2016, 20:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Rise
aimas соотвественно если он на компе часовой пояс поменяет, он и там изменится...
Вы живете по своей временной зоне или же меняете ее на иную? Пусть меняет на здоровье, время на часах при этом не поменяется.

Можно взять и таймштамп серверного времени, корректировать его каждую секунду, открывать дату по этому времени.

singmen,

<html>
<head>
</head>
<body>
<div id="times"></div>
<!--Contents-->
<script>//var zO = new Date().getTimezoneOffset() * 60 * 1000 + <?=date("Z") * 1000?>; //это должно быть реально в скрипте
var zO = new Date().getTimezoneOffset() * 60 * 1000 + 10800000; //а это для действующего примера, по Москве, удалить из реального скрипта
function watch() {
    var d = new Date((new Date).getTime() + zO), 
        t = d.getMinutes(),
        locale = 'ru-RU', 
        options = {year: 'numeric', month: 'long', day: 'numeric'};
    
    return {
        dY : d.getFullYear(), 
        dM : d.getMonth() + 1, 
        dD : d.getDate(), 
        sD : d.toLocaleDateString(locale, options), //локальное представление даты, поддержка locale и options: FF 29, IE 11, Opera 15, в Safari нет поддержки русской локали 
        tH : d.getHours(), 
        tM : t < 10 ? "0"+t : t, 
        tS : d.getSeconds()
    } 
}

function outTime() {
   var t = watch(); //объект значений текущего времени
   //выводим во что-то время
   document.getElementById('times').innerHTML = '<pre>' + t.sD + ' ' + t.tH + (t.tS & 1 ? ':' : ' ') + t.tM + '</pre>';
   setTimeout(outTime, 1000);   
}

outTime();
</script>
</body>
</html>

Последний раз редактировалось laimas, 13.08.2016 в 20:41.
Ответить с цитированием
  #9 (permalink)  
Старый 13.08.2016, 20:52
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от laimas Посмотреть сообщение
Вы живете по своей временной зоне или же меняете ее на иную?
Ну я и время не меняю как автор...
Сообщение от laimas Посмотреть сообщение
Пусть меняет на здоровье, время на часах при этом не поменяется.
Ну если бы не менялось тогда бы не было такой настройки наверное...

PS: в данном случае лучше вообще не использовать объект Date наверное чтобы никак не подкрутили

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

Сообщение от Rise
Ну если бы не менялось тогда бы не было такой настройки наверное...
Как оно изменится? Пример выдает часы по московскому времени, у вас они по нему идут? И какой у вас часовой пояс?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
часы для сайта помогите собрать bulkashev Ваши сайты и скрипты 0 30.07.2013 11:50
Часы сервера на javascript и php NexXT Общие вопросы Javascript 3 14.03.2013 15:05
Не работают Часы Dimanchik87 Events/DOM/Window 2 08.03.2013 03:04
Помагите пожалуйста скрипт со временем Sejmon Общие вопросы Javascript 20 15.01.2013 20:29
аналоговые часы v4567 Ваши сайты и скрипты 4 06.06.2009 19:00