PDA

Просмотр полной версии : Проблемы с часиками - отстают


mixey_lv
20.12.2007, 01:00
Странная вещь происходит...
Я беру от сервера начальное время (unix time stamp) и пытаюсь заставить часики флэша тикать именно с этого времени, способ что я придумал оказался не верным... Часы отстают после достаточно коротокого интервала времени (5-7мин) на 5-6 секунд, т.е. если ждать еще - будет еще хуже. В чем проблема?

var lv:LoadVars = new LoadVars();
lv.load('http://localhost/clock/myscript.php');
lv.onLoad = function(success:Boolean) {
if (success) {
phpsec = parseInt(lv.unixtime);
server_time = new Date(phpsec*1000);
current_time = server_time;
intervalId = setInterval(executeCallback, 1000);
} else {
trace('грузимся');
}
};

function executeCallback():Void {
current_time = new Date(current_time.getTime() + 1000);
}


trace(getTimer());

показывает, что Callback вызывается не четко раз в секунду..

iNils
20.12.2007, 01:10
setInterval не гарантирует точность.

mixey_lv
20.12.2007, 01:12
А какие есть методы/способы, как заставить флэш часики пойти с определеного времени?

iNils
20.12.2007, 01:17
Не понял вопроса.

mixey_lv
20.12.2007, 01:23
new_date = new Date();

В new_date будет время взятое с компьютера пользователя.
А у меня есть необходимость брать точное время с сервера.
Т.е. получить время от сервера и сказать флэшу, что вот ПРАВИЛЬНОЕ время и работай с ним.

aksios
20.12.2007, 01:33
Хе хе. А с чего вы взяли, что серверное время сможите передать без ошибки? Это между прочим может сделать только довольно нехилый код. Ваще вам зачем это нужно?

2morrowMan
20.12.2007, 01:38
После того как приходит врема с сервера делаеш new_date = new Date(), вычисляеш разницу между ними time_offset = server_time - new_date.getTime(), и потом:

function executeCallback():Void {
var date:Date = new Date();
current_time = date.getTime() + time_offset; // может быть " - time_offset"
}

mixey_lv
20.12.2007, 01:39
Серверное время прекрасно передаётся через loadvars (мелкие задержки при передаче не в счет)

А нужно вот для чего. на сайте есть несколько пар часов, которые показывают время в разных часовых поясах. т.е. +/- сколько часов от серверного времени (это обязательное условие, брать время с сервера).

т.е. надо получить число/время сколько сейчас на сервере и потом от этого "плясать"

После того как приходит врема с сервера делаеш new_date = new Date(), вычисляеш разницу между ними time_offset = server_time - new_date.getTime(), и потом:

function executeCallback():Void {
var date:Date = new Date();
current_time = date.getTime() + time_offset; // может быть " - time_offset"
}

Спасибо! Очень интересная идея! сейчас попробую.

aksios
20.12.2007, 01:49
getTimezoneOffset(); или вроде того:
nowDate=new Date();
date1=nowDate.getUTCHours();
И делов то.
ЗЫ: а вот насчет время прекрасно передаётся через loadvars (мелкие задержки при передаче не в счет это вот не надо - ошибка конечно не час, но и не милисекунда.

mixey_lv
20.12.2007, 01:53
2 aksios: Да я согласен с Вами на счет ошибки и про getUTCHours() в курсе, но вот задача брать именно сервера время. т.к. сервер постоянно синхронизируется по точным часам, а вот компьютеры пользователей не всегда. Поэтому принимается, что в результате передачи времени от сервера оно будет точней чем с компьютера пользователя.


Спасибо еще раз 2morrowMan - задача решена