|
|
|
|
|
для: 12345
(04.11.2005 в 16:13)
| | Ещё лучше, без лишних переменных:
<U>Местное время клиента:</U> <span id=timeK></span><br>
<U>Время сервера с переводом на зону клиента:</U> <span id=time></span><br>
<U>Местное время сервера:</U> <span id=timeS></span><br>
<script>d=document;
Dphp=<?=gmmktime()*1000?>;//Гринв.вр.сервера в миллисекундах
//Если пишется без пхп, заменить выражение числом 1131037423000 ,это будет 17:03 для MSK
d.write('Начальное время сервера: '+(new Date(Dphp))+'<br>');
Djs=(D=new Date()).getTime()-D.getTimezoneOffset()*60000; //Гринв.вр.клиента в миллисекундах
d.write('Начальное время клиента: '+(new Date(Djs))+'<br>');
DD=Dphp-Djs;//Разнобой часов. Прибавлять, чтобы получить серверное, но в местном поясе
dServM=<?=date('Z')/60?>;
d.write('Часовой пояс сервера: '+dServM+'<br>');
dKlientM=-(new Date()).getTimezoneOffset();
d.write('Часовой пояс клиента: '+dKlientM+'<br>');
DPoyas=(dServM-dKlientM)*60000;//Разность поясов. Прибавить, чтобы снова вернуться к местному серверному
onload=function(){setInterval("clock1()",999);clock1();}
function clock1(){var D0;hms('timeK',D0=new Date);
hms('time',new Date(D0.getTime()+DD));
hms('timeS',new Date(D0.getTime()+DD+DPoyas));
}
function hms(layr,X){d.getElementById(layr).innerHTML=X.getHours()
+':'+(X.getMinutes()/100).toFixed(2).substr(2)+':'+(X.getSeconds()/100).toFixed(2).substr(2);
}
</script>
| Здесь последняя строчка +((m=X.getMinutes())<10?'0':'')+m+ заменена на +(X.getMinutes()/100).toFixed(2).substr(2)+ . | |
|
|
|
|
|
|
|
для: Atom
(04.11.2005 в 11:15)
| | Почему неправильное, если 14:08 минус 3 часа есть 11:08 ? Это времена по Гринвичу (UTC) с указанием часового пояса. Тут, я вижу, правильно, и сервер с клиентом в одном часовом поясе. Интересно проверить случай, когда сервер и клиент будут в разных часовых поясах.
Сделал код покомпактнее:
<U>Местное время клиента:</U> <span id=timeK></span><br>
<U>Время сервера с переводом на зону клиента:</U> <span id=time></span><br>
<U>Местное время сервера:</U> <span id=timeS></span><br>
<script>d=document;
Dphp=<?=gmmktime()*1000?>;//Гринв.вр.сервера в миллисекундах
//Если пишется без пхп, заменить выражение числом 1131037423000 ,это будет 17:03 для MSK
d.write('Начальное время сервера: '+(new Date(Dphp))+'<br>');
Djs=(D=new Date()).getTime()-D.getTimezoneOffset()*60000; //Гринв.вр.клиента в миллисекундах
d.write('Начальное время клиента: '+(new Date(Djs))+'<br>');
DD=Dphp-Djs;//Разнобой часов. Прибавлять, чтобы получить серверное, но в местном поясе
dServM=<?=date('Z')/60?>;
d.write('Часовой пояс сервера: '+dServM+'<br>');
dKlientM=-(new Date()).getTimezoneOffset();
d.write('Часовой пояс клиента: '+dKlientM+'<br>');
DPoyas=(dServM-dKlientM)*60000;//Разность поясов. Прибавить, чтобы снова вернуться к местному серверному
onload=function(){setInterval("clock1()",999);clock1();}
function clock1(){var D0;hms('timeK',D0=new Date);
hms('time',new Date(D0.getTime()+DD));
hms('timeS',new Date(D0.getTime()+DD+DPoyas));
}
function hms(layr,X){var m,s; d.getElementById(layr).innerHTML
=X.getHours()+':'+((m=X.getMinutes())<10?'0':'')+m+':'+((s=X.getSeconds())<10?'0':'')+s;
}
</script>
|
| |
|
|
|
|
|
|
|
для: 12345
(04.11.2005 в 01:30)
| | Результат -
Местное время клиента: 11:10:16
Время сервера с переводом на зону клиента: 11:10:15
Местное время сервера: 11:10:15
Начальное время сервера: Fri Nov 4 14:08:52 UTC+0300 2005
Начальное время клиента: Fri Nov 4 14:08:52 UTC+0300 2005
Часовой пояс сервера: 180
Часовой пояс клиента: 180
|
Первые два времени соответствуют текущему, а начальное с сервера и клиента неправильное... ( | |
|
|
|
|
|
|
|
для: Atom
(03.11.2005 в 23:26)
| | Так не надо время форматировать в рнр! gmmktime()*1000 даёт всё необходимое, и брать нужно в миллисекундах, чтобы потом вычислить разность, как написано. Потом форматировать в JS, потому что именно JS выводит идущее время.
А я не очень представляю, что тебе нужно - то ли местное серверное, то ли переведённое в часовой пояс клиента. Но, так или иначе, отлаживать и дописывать лучше в деле, с рнр на основе моего скрипта, где все детали сделаны, осталось собрать.
Разнузданный пример с комментариями для слежения за серверным временем (исполнять в файле PHP):
<U>Местное время клиента:</U> <span id=timeK></span><br>
<U>Время сервера с переводом на зону клиента:</U> <span id=time></span><br>
<U>Местное время сервера:</U> <span id=timeS></span><br>
<script>d=document;
Dphp=<?=gmmktime()*1000?>;//Гринв.вр.сервера в миллисекундах
//Если пишется без пхп, заменить выражение числом 1131037423000 ,это будет 17:03 для MSK
d.write('Начальное время сервера: '+(new Date(Dphp))+'<br>');
Djs=(D=new Date()).getTime()-D.getTimezoneOffset()*60000; //Гринв.вр.клиента в миллисекундах
d.write('Начальное время клиента: '+(new Date(Djs))+'<br>');
DD=Dphp-Djs;//Разнобой часов. Прибавлять, чтобы получить серверное, но в местном поясе
dServM=<?=date('Z')/60?>;
d.write('Часовой пояс сервера: '+dServM+'<br>');
dKlientM=-(new Date()).getTimezoneOffset();
d.write('Часовой пояс клиента: '+dKlientM+'<br>');
DPoyas=(dServM-dKlientM)*60000;//Разность поясов. Прибавить, чтобы снова вернуться к местному серверному
onload=function(){
setInterval("clock1()",999);clock1();}
function clock1(){var D0,D,m,s;D0=new Date;
d.getElementById('timeK').innerHTML
=D0.getHours()+':'
+((m=D0.getMinutes())<10?'0':'')+m+':' +((s=D0.getSeconds())<10?'0':'')+s;
d.getElementById('time').innerHTML
=(D=new Date(D0.getTime()+DD)).getHours()+':'
+((m=D.getMinutes())<10?'0':'')+m+':' +((s=D.getSeconds())<10?'0':'')+s;
d.getElementById('timeS').innerHTML
=(D=new Date(D0.getTime()+DD+DPoyas)).getHours()+':'
+((m=D.getMinutes())<10?'0':'')+m+':' +((s=D.getSeconds())<10?'0':'')+s;
}
</script>
| Посмотри, пожалуйста, как работает, в правильную сторону ли прибавляет, а то проверял только на локальном. | |
|
|
|
|
|
|
|
для: Atom
(03.11.2005 в 23:26)
| | Так не надо время форматировать в рнр! gmmktime()*1000 даёт всё необходимое, и брать нужно в миллисекундах, чтобы потом вычислить разность, как написано. Потом форматировать в JS, потому что именно JS выводит идущее время. | |
|
|
|
|
|
|
|
для: 12345
(03.11.2005 в 20:28)
| | Я долго парился с временем по Гринвичу и пр, но так и не понял как задать время для Date(). Пробовал setTime(<?=gmmktime((gmdate("G")+2)*1000)?>) но не работает почему-то. Пробовал new Date(<?=gmmktime((gmdate("G")+2)*1000)?>), но получается статичное время(т.е. часы не идут). В итоге забил на эту затею, не могу на нее тратить столько времени. Если есть идеи, как реализовать - буду рад узнать =) | |
|
|
|
|
|
|
|
для: Atom
(03.11.2005 в 14:29)
| | А, да, забыл, что время из числа надо в объект даты перевести!
time() в рнр показывает системное время, и, действительно, нужно позаботиться о взятии гринвичского. Берём справочники JS (http://xlibscripts.land.ru/jscript_doc/JavaScript/DateJS.html) и рнр, и действуем.
<div id=time></div>
<script> DD=0;
onload=function(){Dphp=1131037423000; //=<?=gmmktime()*1000?>Гринв.вр.сервера в миллисекундах
//Для проверки поставлено время 20:03 MSK. Стартовать всегда будет с этого.
Djs=new Date(); //Местное время клиента в миллисекундах
DD=Dphp-Djs;//Эту разность будем прибавлять, чтобы получить серверное, но в местном поясе.
setInterval("clock1()",999);clock1();}
function clock1(){var D,m,s;
document.getElementById('time').innerHTML=
(D=new Date((new Date()).getTime()+DD)).getHours()+':'
+((m=D.getMinutes())<10?'0':'')+m+':' +((s=D.getSeconds())<10?'0':'')+s;
}
</script>
| Здесь, возможно, не то, что нужно Вам. Не местное серверное время, а как-то сдвинутое. В общем, инструмент Вам дал, а дальше - просьба разобраться в поправках, чтобы само везде работало и поделиться результатами. | |
|
|
|
|
|
|
|
для: 12345
(03.11.2005 в 00:41)
| | Секунды мне не важны, там часы без секунд.
Но не работает! Если в вашем скрипте стоит new Date то все ок, а если time()*1000 то не пашет
И немного непонятно, как мне с этим time() добиться времени GMT +2, при том что я совершенно не знаю какое там время будет на сервере :( | |
|
|
|
|
|
|
|
для: Atom
(02.11.2005 в 23:45)
| | Атоm: немного не там вставил. Надо вместо var Digital = new Date(); писать
var Digital = <?=time()*1000?>
| . Проблема только в том, что нет контроля за скоростью передачи страницы, поэтому часы на странице будут отставать на (время загрузки) секунд от серверного времени.
И вообще, скрипт устаревший и имеет не нужные для России AM/PM.
codexomega: По-моему, лучше учиться писать свои скрипты, чтобы не привносить мусора в код сраницы, в котором рано или поздно придётся разбираться.
Поправил скрипт, и получилось:
<div id=time></div>
<script>
onload=function(){setInterval("clock1()",999);}
function clock1(){var D,m,s;document.getElementById('time').innerHTML=
(D=new Date()).getHours()+':'
+((m=D.getMinutes())<10?'0':'')+m+':'
+((s=D.getSeconds())<10?'0':'')+s;
}
</script>
| Менять на рнр надо, как и там, new Date(). Ведь намного короче. | |
|
|
|
|
|
|
|
для: Atom
(02.11.2005 в 23:45)
| | Ураа! Нашел.
Вот, с живым примером и скриптом:
http://www.javascriptkit.com/script/script2/servertime.shtml | |
|
|
| |
|