Вход

Просмотр полной версии : аналоговые часы с подгрузкой времени с сервера и чтоб стрелки вертелись


Acxat
01.06.2010, 10:59
Помогите пожалуйста?! :)
Мне нужны аналоговые часы с подгрузкой времени с сервера и чтоб стрелки вертелись.

Eсть PHP файл time.php с кодом:

<?php
echo 'theTime='.urlencode(date('g:i:s A')).'&theHour='.urlencode(date('g')).'&theMinutes='.urlencode(date('i')).'&theSeconds='.urlencode(date('s')).'&amORpm='.urlencode(date('A'));
?>


Есть код для Flash:

myVars = new LoadVars();
myVars.load("http://yourserver.com/time.php");

myVars.onLoad = function(success) {
if (success) {
trace("variables loaded");
trace(this.theTime);
trace(this.theHour);
trace(this.theMinutes);
trace(this.theSeconds);
trace(this.amORpm);
} else {
trace("Error loading page");
}
};

time = theTime();// time object
seconds = theSeconds();
minutes = theMinutes();
hours = theHour();

hours = hours+(minutes/60);

seconds = seconds*6;// calculating seconds
minutes = minutes*6;// calculating minutes
hours = hours*30;// calculating hours

sec._rotation = seconds;// giving rotation property
min._rotation = minutes;// giving rotation property
hour._rotation = hours;// giving rotation property

Время выводит на Output пример: 11:49:57 AM
Вот стрелки не крутятся совсем.

Заранее спасибо!

udaaff
01.06.2010, 11:14
Для оформления своего кода надо использовать теги (http://www.flasher.ru/forum/showthread.php?t=122539)

mooncar
01.06.2010, 11:37
Ну нужно же непрерывно получать данные и непрерывно их выводить.
Типа такого:
setInterval (loadTime, 500);

function loadTime () {
myVars.load('http://yourserver.com/time.php');
}



Видимо, в примере за кадром остались также функции theTime() и прочие.
Все действия по выводу можно писать либо отдельно также где-нибудь с помощью еще одного setInterval, а можно даже внутри loadTime.
Если что, можно поднять частоту, уменьшив интервал с 500, например до 100, правда не уверен, что такая частота запросов скрипта - хорошо с точки зрения нагрузки на сервер.

Мысль еще такая есть - может быть просто сделать один запрос на серверное время, сравнить его со временем на локальной машине пользователя и выводить время, основываясь на времени клиентской машины (с помощью getTime), но с коррекцией, основанной на сервеном времени (учесть разницу).

PS. Кстати, что значит "аналоговые"?

Acxat
01.06.2010, 13:32
Аналоговые часы - это часы со стрелками

Tails
01.06.2010, 13:39
mooncar
Загрузки 1 раз будет недостаточно ? :)
помогите плз в соседней теме.

mooncar
01.06.2010, 13:46
Если вам нужна актуальная информация о времени, то ее и получать нужно с требуемой частотой. Разве это не очевидно?

Acxat
01.06.2010, 13:46
Хотелось бы посмотреть на код полностью так как во Flash я почти полный ноль (

mooncar
01.06.2010, 14:29
Хотелось бы посмотреть на код полностью так как во Flash я почти полный ноль (
На какой код вы хотите взглянуть? Вроде вы сами написали "есть код для Flash".
Судя по нему, вам нужно нарисовать стрелки sec, min и hour, и поместить
вот этот блок в подинтервальную функцию:
hours = hours+(minutes/60);

seconds = seconds*6;// calculating seconds
minutes = minutes*6;// calculating minutes
hours = hours*30;// calculating hours

sec._rotation = seconds;// giving rotation property
min._rotation = minutes;// giving rotation property
hour._rotation = hours;// giving rotation property
И еще понять, что подразумевается в приведенном вами куске кода вот здесь
time = theTime();// time object
и далее... что это за функции? Они не приводятся.
Скорее всего в них осуществляется перевод полученных с сервера данных в целочисленные значения AS, которые и используются для дальнейших вычислений:

myVars.onLoad = function(success) {
if (success) {
hours = Number(this.theHour);
minutes = Number(this.theMinutes);
seconds = Number(this.theSeconds);
}
};

rainbowrussia
02.06.2010, 04:52
Если вам нужна актуальная информация о времени, то ее и получать нужно с требуемой частотой. Разве это не очевидно?

Ну зачем же. Достаточно получить 1 раз "базовое" время, затем остается только к нему добавлять getTimer(). Вероятностью аномального течение системного времени на компьютере пренебрегаем.

Но если нужно очень высокая точность синхронизации, то тут нужно делать несколько запросов, вычислять время задержки ответа от сервера и тд. Рядом есть тема про дату - http://www.flasher.ru/forum/showthread.php?p=912440 Задачи похожие - отсчитывать время от заданного.

mooncar
02.06.2010, 10:10
rainbowrussia, я об этом и говорил

Мысль еще такая есть - может быть просто сделать один запрос на серверное время, сравнить его со временем на локальной машине пользователя и выводить время, основываясь на времени клиентской машины (с помощью getTime), но с коррекцией, основанной на сервеном времени (учесть разницу).

А насчет актуальности - пытался просто донести мысль до автора, что один раз сделать запрос недостаточно, информацию надо обновлять - даже с помощью getTimer() или getTime() она все равно нуждается в актуализации.
У него же первое затруднение вызвало то, что информация в приведенном коде не обновляется.

Acxat
02.06.2010, 10:36
myVars = new LoadVars();

myVars.load("http://localhost/peaceclock_site/time.php");

myVars.onLoad = function(success) {
if (success) {
trace("variables loaded");
trace(this.theTime);
trace(this.theHour);
trace(this.theMinutes);
trace(this.theSeconds);
trace(this.amORpm);
} else {
trace("Error loading page");
}
};

time=theTime(); // time object
seconds = theSeconds()
minutes = theMinutes()
hours = theHour()

hours = hours + (minutes/60);

seconds = seconds*6; // calculating seconds
minutes = minutes*6; // calculating minutes
hours = hours*30; // calculating hours

sec._rotation=seconds; // giving rotation property
min._rotation=minutes; // giving rotation property
hour._rotation=hours; // giving rotation property

Значит этот код ваще не будет работать? )
Думал может здесь ошибка какая-то
Надо будет искать другой скрипт?

rainbowrussia
02.06.2010, 23:59
rainbowrussia, я об этом и говорил

Прошу прощения, пропустил этот момент.