Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование часов со смещением, как правильней сделать?  
V
    Опции темы
z-END
Дата 28.8.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 4
Всего: 102



Вообщем мне нужно показывать время установленное на сервере
я сделал так:
1. вывод данных для скрипта в пхп:
Код

echo "
var TimeHour=$hour;
var TimeMin=$min;
var TimeSec=$sec;
"


2. скрипт отображающий время в окошке..
Код

function ShowTime(){
    TimeSec++;
    if (TimeSec>59) {TimeSec=0;TimeMin++;}
    if (TimeMin>59) {TimeMin=0;TimeHour++;}
    if (TimeHour>23) TimeHour=0;
    
TimeMin)  + ":" + ((TimeSec<=9) ? "0"+TimeSec : TimeSec);
    time = ((TimeHour<=9) ? "0"+TimeHour : TimeHour) + ":" + ((TimeMin<=9) ? "0"+TimeMin : TimeMin);
    if (showedtime!=time) {
        obj=document.getElementById('ClockArea');
        if (!obj) return;
        showedtime=time;
        obj.innerHTML=time;
    }
    setTimeout("ShowTime()", 1000);
}



Но что-то мне подсказывает что можно проще сделать... может как-то время в браузере подкрутить просто можно?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
dXdYdZ
Дата 28.8.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 16.4.2007

Репутация: 3
Всего: 4



Так оно правильно работать не будет (будет или спешить, или отставать).
Необходимо просто:
1) С помощью JavaSCript Получить время в браузере
2) Получить время с сервера
3) С помощью JavaScript вычислить разницу между временем в браузере и на сервере
4) Постоянно выводить время с учётом разницы

PM MAIL   Вверх
dXdYdZ
Дата 29.8.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 16.4.2007

Репутация: 3
Всего: 4



А задачка не такая простая, как кажется на первый взгляд. Вот код:
Код

echo "
var sec=$sec;
var min=$min;
var hour=$hour;
";

Код

load=function()
{
var clientTime=new Date();
var serverDate=new Date(0,0,0,hour,min,sec);
var delta=serverDate-clientTime;
showTime=function()
    {
    document.getElementById('ClockArea').innerHTML=(new Date((new Date()).getTime()+delta)).toLocaleTimeString();
    }
setInterval("showTime()", 1000);
}

Функцию load надо вызвать в document.body.onload.

Это сообщение отредактировал(а) dXdYdZ - 29.8.2007, 01:20
PM MAIL   Вверх
z-END
Дата 29.8.2007, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 4
Всего: 102



здоровоsmile

Добавлено через 1 минуту и 31 секунду
а вот еще вопрос в догонку... насчет использования кнопки "назад" 
в этом случае время станет неточным... я тут подумал а если каждую секунду записывать время в куку и оттуда счтывать, так мы ведь победим сброс времени?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Ghirik
Дата 29.8.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 919
Регистрация: 26.3.2007

Репутация: 13
Всего: 20



Согласен, я то же не знал, что так вот времячко выводят... smile 


--------------------
Отдадим всё клиенту, пускай его машина мучается...

PM MAIL   Вверх
dXdYdZ
Дата 29.8.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 16.4.2007

Репутация: 3
Всего: 4



Цитата

я тут подумал а если каждую секунду записывать время в куку и оттуда счтывать, так мы ведь победим сброс времени?

Пожалуй, туда стоит записать не само время, а смещение - delta.
PM MAIL   Вверх
12345c
Дата 29.8.2007, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



dXdYdZ, я этим занимался, вот статья (пока недоступна) с рабочим кодом: 

Код
<p>Работающий скрипт:</p>

<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;//Гринв.вр.сервера в миллисекундах
    dServM=<?=date('Z')/60?>;
      //Если пишется без пхп, заменить выражение числом 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;//Разнобой часов. Прибавлять, чтобы получить серверное, но в местном поясе
      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>
(Собирался дальше копать - учесть задержку передачи от сервера к клиенту, но не доделал.)
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.