PDA

Просмотр полной версии : Часы. Правильное определение времени


suvorov
10.03.2011, 11:15
Добрый день господа! Прихожу за помощью на этот форум, уже не в первый раз и все по той же проблеме.

Собственно есть часы во Flash, на них показывается время в 3-х часовых поясах. В целом все круто, когда человек смотрит эти часы из Москвы (он видит правильное время в Екатеренбурге и в Дели), но когда человек заходит из Екатеринбурга, то здесь становится все неверно.



function initClock( mov, offset )
{
mov.onEnterFrame = function()
{
myDate = new Date();
myDate.setMinutes ( myDate.getMinutes() + offset );
//trace( myDate.getMinutes() +" / "+ min2 )

hour = myDate.getHours();
min = myDate.getMinutes();
sec = myDate.getSeconds();

this.m3._rotation = min * 6 + sec * 1.000000E-001
this.s3._rotation = sec * 6
this.h3._rotation = hour* 30 + min * 5.000000E-001
}
}


initClock( CL, 0 )
initClock( CL2, 120 )
initClock( CL3, 150 )


Если можно, то подскажите, что и где заменить. У меня проблема с пониманием всех этих штук((. Буду очень благодарен!

mooncar
10.03.2011, 11:25
Простой работой только в коде AS тут вопрос не решить. Все дело в том, что сейчас у вас используется время компа пользователя, а не точное время.
Более-менее точное время можно взять с помощью php-скрипта с сервера, на котором хостится флешка. Например, только один раз для синхронизации. Или несколько раз в минуту (на случай, если вдруг юзер успел перевести время на компе опять).

Tails
10.03.2011, 11:40
suvorov

Получить время по гринвичу.

Либо с компа юзара
Либо с сервера (предпочтительнее)


Добавить к исходному времени сдвиг часового пояса, на котором сидит юзер (грузим с компа)
К полученному результату плюсуем сдвиг для определённой столицы.
Получаем результат - время в столице другой страны, относительно часового пояса юзара.

Оперировать нужно датой в милисекундах, затем полученный результат возводить в понятную юзару форму.
... хотя в милисекундах - даже не обязательно. :quiet:

mooncar
10.03.2011, 11:45
Tails, а вдруг у юзера БИОС слетел, батарейка померла и там 1999 год стоит? Как в этом случае с компа получить время по гринвичу? :)
Время надо брать с сервера, раз уж автор делает замыслил такую систему.

Tails
10.03.2011, 11:47
mooncar
Полностью согласен. Грузить с компа юзара - это только как альтернативный вариант, при ну совсем не возможной реализаций забора времени с сервера.

dark256
10.03.2011, 15:13
Если у него слетел БИОС и сдохла батарейка, как думаете, много там на компе при всем этом будет интернета и серверов? :)))

Вот утилитка для более детального разбора что происходит во флэше со временем:
http://vkontakte.ru/app1871605

mooncar
10.03.2011, 15:37
Если у него слетел БИОС и сдохла батарейка, как думаете, много там на компе при всем этом будет интернета и серверов? :)))

Если сдохла батарейка, то комп может работать как ни в чем не бывало, загрузившись с дефолтными настройками БИОСА, только время может хромать и некоторые пользовательские настройки исчезнут. В большинстве случаев комп будет работать относительно благополучно, после того как юзер жамкнет F1, и загрузка пойдет далее.

suvorov
10.03.2011, 20:02
Мужики)) Вы о чем? Нет, в смысле, спасибо всем конечно за столь глубокое обсуждение, но я реально ничего не понимаю...Можно какой-нибудь кусочек кода привести в пример? Ну или слепить за меня, я конечно не на бирже бесплатных рабочих, но надеюсь на Вашу помощь. С этими часами ковыряюсь уже 3-ю неделю...и ничего, не понимаю...

dark256
11.03.2011, 00:30
Если сдохла батарейка, то комп может работать как ни в чем не бывало, загрузившись с дефолтными настройками БИОСА, только время может хромать и некоторые пользовательские настройки исчезнут

Нуууу..... эээ... нотебяка. 1й пень.
Батарейка цмоса сдохла. просит ввести параметры винта.... эээ... и? :)))))))

Добавлено через 1 минуту
Мужики)) Вы о чем? Нет
Мужикик теоретизируют. Брать время с компа. Часовой пояс - на ноль. Относительно нуля рисовать часы для всех, включая для себя.
Кстати с этой весны станет проще - UTC зимнее-летнее время не знает :)

suvorov
11.03.2011, 15:13
А у меня откуда время берется? разве не с компа?

Смысл такой, у меня 3-е часов:

1. Москва
2. Екатеринбург
3. Дели

Захожу с Московского компа и беру время с компа к первым часам
А вот если я захожу с Екатеринбурга и беру время с компа к первым часам, то эти часы покажут уже время Екатеринбурга

Пришел к мнению, что время лучше брать с интернета, так просто думается проще)

Можете как-нибудь привести пример, как мне к часам привязать время с сервера? Наверняка есть такая фича. Вообще я думаю будет полезным вложением в жизнь форума, кусочек кода, который берет время с интернета для Москвы и других городов.

Tails
16.03.2011, 12:37
Ну, создаёте пэхэпэ файл на сервере, выплёвывающий время, что-то типо:
<?php
echo("serverHour=".date("<index>"). "&serverMinute=".date("<index>"));
?>
Где <index> - это символ, обозначающий в каком виде выплёвывать дату. Эти символы можно найти в каком нибудь хелпе по пыхе, из раздела работа с Date.

Собсно, ответ от пхп должен выглядеть примерно так:
serverHour=12&serverMinute=07&serverSecond=37 ...

Затем флешью считываете эту строку, обрабатываете полученные данные, и пользуетесь.
И не забываем что флеш работает в UTF-8, => пхп файл должен быть тоже UTF-8

suvorov
18.03.2011, 14:05
Спасибо за ответы!

Добавлено через 1 час 22 минуты
Сосбственно Dark Angel помог в аське, исходя из того, что он мне написал, у меня получается вот такой код:

function initClock(mov, offset)
{
mov.onEnterFrame = function ()
{
myDate = new Date();
myDate = myDate.getTimezoneOffset();
myDate.setMinutes (myDate.getMinutes() + offset );
hour = myDate.getHours();
min = myDate.getMinutes();
sec = myDate.getSeconds();
this.m3._rotation = min * 6 + sec * 1.000000E-001;
this.s3._rotation = sec * 6;
this.h3._rotation = hour * 30 + min * 5.000000E-001;
};
} // End of the function
initClock(CL, 0);
initClock(CL2, 120);
initClock(CL3, 150);


Теперь хотел бы написать о том, что я понял (если что-то не так, не пинайте, я и сам знаю что бревно)

И так, идем по порядку кода:

1.Установили время
2.Взяли время по Гринвичу + смещение
3.Получили часы
4.Получили минуты
5.Получили секунды
6.Задали смещение минутной стрелки
7.Задали смещение секундной
8.Задали смещение часовой

initClock(CL, 0);
initClock(CL2, 120);
initClock(CL3, 150);

Если я правильно понял, то этот кусок устанавливает время, а точнее сдвиг для каждых из часов в минутах.

Теперь, когда у меня время по Гринвичу, то определенно нужно как-то указать смещение часовых поясов. То есть в последних трех строчках, я должен указать, что-то вроде:

initClock(CL, 0);
initClock(CL2, offset UTC -5);
initClock(CL3, offset UTC - 3.5);

Короче как бы сам смысл мне ясен, просто не знаю как реализовать его...

Код, что с самого в верха, у меня отказывается работать, все стрелки на 12 :(...

Люди, все же тяжело все это и дело даже не в том, что я ленивый и все такое, дело в том, что я очень плохо понимаю эти программы, ну или просто не могу воспроизвести это все программным образом. Буду очень и очень благодарен, если кто-то ещё кроме DarkAngel'a отзовется и подскажет пару или сколько там строчек...

suvorov
22.03.2011, 19:42
Кто-нибудь

Добавлено через 43 часа 3 минуты
Люди, уважаемые, но уж то так сложно написать когда знаешь? Или это сильно трудоемко? Не стать мне программистом от Ваших подсказок, хотя я их ценю и реально пытаюсь что-то понять, но безрезультатно...