Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   клиентонезависимое время (http://www.flasher.ru/forum/showthread.php?t=176930)

in4core 20.03.2012 23:42

клиентонезависимое время
 
День добрый такая проблема, мне с сервера присылают дату , моя задача перевести в милисекунды и отобразить как часы и минуты соотв потом.
Что делаю

Код AS3:

var d:Date = new Date();
d.setTime(Date.parse(serverTime));
_globalTime = d.getTime();
var h:String = d.getHours().toString();
var m:String = d.getMinutes().toString();
if (h.length < 2) h = '0' + h;
if (m.length < 2 ) m = '0' + m;
 
_timeTf.text = h + ':' + m;

В этом случае, если на клиенте меняют часовой пояс, то когда перевожу в милисекунды показывает локальное время почему то. Что делаю не так?

Wolsh 20.03.2012 23:57

Ну а в хелпе что написано?
Цитата:

getHours () метод
Возвращает час (целое число от 0 до 23) дня, относящегося к объекту Date, по местному времени. Местное время определяется операционной системой, в которой запущен Flash Player.
Цитата:

getUTCHours () метод
Возвращает из объекта Date час дня (целое число от 0 до 23) по всемирному скоординированному времени (UTC).

in4core 21.03.2012 00:31

Wolsh это все ясно. Только я не понял, второй метод не относится к опрерационной системе?

Добавлено через 31 минуту
Попробовал по UTC как ты мне посоветовал, но теперь выводит время на 4 часа раньше.
Мне передают строку Wed, 21 Mar 2012 00:01:31 +0400 , получается 20:01 , выходит надо вручную добавлять 4 часа теперь? ! А если будет +0300 или вообще другое, откуда я буду знать какое число прибавлять, вычитать ? или как то все по другому делается?

Wolsh 21.03.2012 01:53

http://ru.wikipedia.org/wiki/%D0%A7%...BE%D1%8F%D1%81
http://ru.wikipedia.org/wiki/UTC
"Серверное" время и есть UTC, только отдается обычно в секундах. Это просто число [милли]секунд, прошедших с 0:00:000 1 января 1970 года. То есть оно не зависит от часового пояса, летнего времени и "операционной системы". На любом сервере в любой точке земного шара в один момент времени это одна и та же цифра. А локальное время в операционной системе уже учитывает часовой пояс и летнее время.
Сформулируйте вопрос по-человечески. Нифига не понятно, зачем вручную прибавлять 4 часа, если Вам нужно не локальное время.

K.A.T.A.F.A.L.K.E.R 21.03.2012 03:18

Не совсем понятно в чем задача в целом.
Date.parse корректно распарсил дату сервера "Wed, 21 Mar 2012 00:01:31 +0400".
Если нужно именно время сервера - так вот же она, 00:01:31, в чем проблема? :)
Если хочется парсить через Date - тогда да, Вы получите либо в UTC что именно 20:01 либо свое локальное, все это Date делает автоматически. Опять же, часовой пояс свой сервер вернул: +0400.

in4core 21.03.2012 12:47

Поясняю общую задачу, чтобы было всем понятно.
1. Сервер передает время.
2. Нужно отобразить часы:минуты на странице.
3. Нужно сохранять ПОЛНОЕ время в милисекундах.
4. Приходят события, у них тоже есть некое серверное время, естественно отличное от того, что приходит изначально, на час или на два , ну вообщем не важно любое...
5. Если ГЛОБАЛЬНОЕ ВРЕМЯ - ВРЕМЯ СОБЫТИЯ > 35 минут , такое событие считается не валидным. Вот для этого и сохраняется глобальное время каждую секунду, вот поэтому нельзя распарсить без даты.

K.A.T.A.F.A.L.K.E.R 21.03.2012 13:25

Ну так а в чем проблема-то отобразить время?? Сервер его строкой передал, если не хочется возиться с часовыми поясами - вытащите время из строки что пришла.
По поводу "сравнить время" - делайте Date.parse(...) как и раньше; .getTime вернят Вам время в UTC. Каждый раз когда приходит это "событие" делайте то же самое, сравнивайте .getTime "глобального времени" и "события".

in4core 21.03.2012 13:28

ну собственно так я и хотел делать, думал может есть варианты лучше.

Wolsh 21.03.2012 15:01

Цитата:

1. Сервер передает время.
4. Приходят события, у них тоже есть некое серверное время...
Как именно сервер отдает время, текущее и время события? Строкой, уже отформатированной в дату, или одним числом, количеством секунд? Если в обоих случаях это кол-во секунд, то сразу вычесть и перевести остаток в минуты, сравнить с лимитом.
Получить форматную дату для отображения через парсинг.
Еще не понял – вы каждый раз при получении события запрашиваете и текущее время на сервере? Или используете системные часы?

in4core 21.03.2012 18:02

Использую свои часы через таймер. сервер отдает только 1 раз ясное дело. А для события, ну по приходу и получаю. Нет не в секундах, а строкой и для события и для общего времени.

Добавлено через 3 минуты
Wolsh а еще вопрос.
А можно так ?
Код AS3:

var d:Date = new Date();
d.setHours(10);
d.setMinutes(20);

и по таймеру проверять следующее время.
Или в этом случае все равно локальное компа вернет?
Вроде попробовал вернуло 10 часов...
Что скажешь?


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

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