13.08.2016, 14:44
|
Интересующийся
|
|
Регистрация: 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(); соотвественно если я на компе время поменяю, оно и там изменится, как этому можно препятствовать?
|
|
13.08.2016, 14:50
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Серверное время передавай.
|
|
13.08.2016, 15:02
|
Интересующийся
|
|
Регистрация: 20.07.2014
Сообщений: 15
|
|
а поподробнее можно?
|
|
13.08.2016, 15:18
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
singmen, если требуется синхронизировать чеса клиентов по времени сервера, то отдавайте в JS смещение временной зоны сервера, на которую корректировать смещение клиента - часы у клиентов будут идти по времени сервера. Как передать это смещение, зависит от серверного языка. На РНР, это так:
date("Z"); //в секундах со знаком
|
|
13.08.2016, 15:40
|
Интересующийся
|
|
Регистрация: 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 секунд за раз прыгает
|
|
13.08.2016, 16:20
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Не так. Смещение временной зоны на клиенте возвращается в минутах, на сервере, если РНР, в секундах.
Если у вас РНР, отдавая страницу клиенту дописывайте в конце нее (перед закрывающим тегом 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.
|
|
13.08.2016, 20:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от 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.
|
|
13.08.2016, 20:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Rise
|
Ну если бы не менялось тогда бы не было такой настройки наверное...
|
Как оно изменится? Пример выдает часы по московскому времени, у вас они по нему идут? И какой у вас часовой пояс?
|
|
13.08.2016, 21:06
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Rise
|
PS: в данном случае лучше вообще не использовать объект Date наверное чтобы никак не подкрутили
|
Что подкрутили? Часы корректируются на разность часового пояса сервера и клиента, пусть устанавливают на здоровье любой часовой пояс.
Если же нужна проверка чего-то от "накрутили", то нужны не просто часы на клиенте, а запрашивать у клиента его часовой пояс и делать проверку на сервере, ибо подкрутить можно что угодно, хоть используя Date, хоть математику с цифрами, и уж если на то пошло, то просто слать сервером без всякого клиента лабуду.
Ну это же не серьезно. )
|
|
13.08.2016, 21:08
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Rise
|
но речь же шла не о нем
|
А о чем? Какой тогда смысл заложен в едином для всех времени?
|
|
|
|