Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Время

Сообщения:  [1-10]   [11-15] 

 
 автор: 12345   (08.11.2005 в 01:58)   письмо автору
 
   для: 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)+ .

   
 
 автор: 12345   (04.11.2005 в 16:13)   письмо автору
 
   для: 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>

   
 
 автор: Atom   (04.11.2005 в 11:15)   письмо автору
 
   для: 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


Первые два времени соответствуют текущему, а начальное с сервера и клиента неправильное... (

   
 
 автор: 12345   (04.11.2005 в 01:30)   письмо автору
 
   для: 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>
Посмотри, пожалуйста, как работает, в правильную сторону ли прибавляет, а то проверял только на локальном.

   
 
 автор: 12345   (04.11.2005 в 01:30)   письмо автору
 
   для: Atom   (03.11.2005 в 23:26)
 

Так не надо время форматировать в рнр! gmmktime()*1000 даёт всё необходимое, и брать нужно в миллисекундах, чтобы потом вычислить разность, как написано. Потом форматировать в JS, потому что именно JS выводит идущее время.

   
 
 автор: Atom   (03.11.2005 в 23:26)   письмо автору
 
   для: 12345   (03.11.2005 в 20:28)
 

Я долго парился с временем по Гринвичу и пр, но так и не понял как задать время для Date(). Пробовал setTime(<?=gmmktime((gmdate("G")+2)*1000)?>) но не работает почему-то. Пробовал new Date(<?=gmmktime((gmdate("G")+2)*1000)?>), но получается статичное время(т.е. часы не идут). В итоге забил на эту затею, не могу на нее тратить столько времени. Если есть идеи, как реализовать - буду рад узнать =)

   
 
 автор: 12345   (03.11.2005 в 20:28)   письмо автору
 
   для: 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> 
Здесь, возможно, не то, что нужно Вам. Не местное серверное время, а как-то сдвинутое. В общем, инструмент Вам дал, а дальше - просьба разобраться в поправках, чтобы само везде работало и поделиться результатами.

   
 
 автор: Atom   (03.11.2005 в 14:29)   письмо автору
 
   для: 12345   (03.11.2005 в 00:41)
 

Секунды мне не важны, там часы без секунд.
Но не работает! Если в вашем скрипте стоит new Date то все ок, а если time()*1000 то не пашет
И немного непонятно, как мне с этим time() добиться времени GMT +2, при том что я совершенно не знаю какое там время будет на сервере :(

   
 
 автор: 12345   (03.11.2005 в 00:41)   письмо автору
 
   для: 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(). Ведь намного короче.

   
 
 автор: codexomega   (02.11.2005 в 23:54)   письмо автору
 
   для: Atom   (02.11.2005 в 23:45)
 

Ураа! Нашел.
Вот, с живым примером и скриптом:
http://www.javascriptkit.com/script/script2/servertime.shtml

   

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования