Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблемы с часиками - отстают (http://www.flasher.ru/forum/showthread.php?t=105641)

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 (мелкие задержки при передаче не в счет)

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

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

Цитата:

Сообщение от 2morrowMan
После того как приходит врема с сервера делаеш 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 - задача решена


Часовой пояс GMT +4, время: 01:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.