Форум 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=112760)

nur 07.06.2008 01:42

часы, переход на летнее время
 
Подскажите как в этот коде сделать чтобы часы автоматически переходили на летнее и зимнее время

Код:

onClipEvent (enterFrame) {
        currentTime = new Date();
        currentHour = currentTime.getUTCHours()+3;
currentMinute = currentTime.getUTCMinutes();
        hourState._rotation = (currentHour*30)+(currentMinute/2);
}

это ставится на часовую стрелку

Роман Вадимович 07.06.2008 02:15

Flash приложение берет время с клиента, на котором запущено.
Каждый раз вызывая currentTime = new Date(); мы получаем значение системного времени ПК пользователя. А как правило у него стоит автоматический переход на лентее время.
Можете почитать здесь и использовать указанный по ссылке алгоритм для определения летнего/зимнего времени: http://ru.wikipedia.org/wiki/Летнее_время

nur 07.06.2008 17:15

в данном случае время берется несовсем с клента, а считается от гринвича, это нужно что бы в любом часов поясе флеш показывал точное московское время.
Но здесь не учитывается переход на летнее и зимнее время. Как сделать это в данном случае?

chingachgoog 07.06.2008 17:26

currentTime.getUTCHours()+3; - это зимнее, +4 - летнее
смотрите даты (по Гринвичу) и выбираете нужное прибавление.

NB Часовой пояс у нас +2, но есть декретное время +1 и еще летнее время +1

nur 07.06.2008 17:57

это я знаю сколько прибавлять нужно.
как сделать чтобы они сами в нужное время менялись как на компе

chingachgoog 07.06.2008 18:15

Так после того как вы определите правильное прибавление (3 или 4) по дате, они (часы) сами и поменяются на компе.
В чем проблема-то?

nur 07.06.2008 18:29

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

chingachgoog 07.06.2008 18:39

Ну и в чем проблема-то? Гринвич-то всегда правильно показывает. Поставлена галочка или нет. От Гринвича и пляшите.
Единственный вариант ошибки - пользователь неустановил галочку перехода времени (т.е. пользуется зимним временем) и самостоятельно привел системное время к текущему (летнему). Но это ошибка пользователя и он прочувствует ее зимой.

nur 07.06.2008 18:42

проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!

iNils 07.06.2008 18:54

Цитата:

Сообщение от nur (Сообщение 744375)
проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!

Код:

dateWinter = new Date (2000, 0);
date = new Date ();
trace (dateWinter.getTimezoneOffset ());
trace (date.getTimezoneOffset ());

У меня показывает -180 и -240, значит есть переход на летнее время. Надо также проверять, попадает ли date в промежуток: последнее воскресенье марта - последнее воскресенье октября

chingachgoog 07.06.2008 19:03

Цитата:

Сообщение от nur (Сообщение 744375)
проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!

Они автоматически перейдут если вы правильно определили прибавление к Гринвичу, кроме отдельного случая указанного мной выше :)

Цитата:

Сообщение от iNils
Гринвич + пояс + если (последнее воскресенье марта < текущая дата < последнее воскресенье октября) { +1}

один час декретного времени забыли (см. выше)
собственно это я и указывал выше, как определение прибавления к Гринвичу, но nur говорит, что проблема не с этим... :)

nur 07.06.2008 19:13

Вложений: 1
во вложении часы с приведенным мной кодом.
chingachgoog, можно убедиться что сами часы не переходят на летнее время!!! :rtfm:
а каждые пол года менять флешку на сайте, это не вполне нормально :mad:

iNils 07.06.2008 19:14

Цитата:

Сообщение от chingachgoog (Сообщение 744378)
один час декретного времени забыли (см. выше)

Не забыл. У нас пояс +3 зимой/+4 летом и флеш об этом знает.

nur 07.06.2008 19:15

chingachgoog, если нет конкретного решения проблемы, большая просьба не засорять тему ненужным флудом!!!

iNils 07.06.2008 19:15

Цитата:

Сообщение от nur (Сообщение 744382)
chingachgoog, можно убедиться что сами часы не переходят на летнее время!!! :rtfm:

Читайте пост номер 10, там сказано, как определить, был переход на летнее время или не был.

chingachgoog 07.06.2008 19:24

Цитата:

Сообщение от iNils (Сообщение 744383)
Не забыл. У нас пояс +3 зимой/+4 летом и флеш об этом знает.

В Москве часовой пояс +2.
Местное время для Москвы= Гринвич + часовой пояс (2) + декретное время (+1) + сезонное (+1 летом)
Флеш знает только смещение между системным временем и Гринвичем.

Цитата:

Сообщение от nur
chingachgoog, если нет конкретного решения проблемы, большая просьба не засорять тему ненужным флудом!!!

Решение я вам сказал еще в посте #4 :)
Поэтому есть две ситуации когда часы по Москве работать не будут:
1) вы неправильно посчитали прибавление к Гринвичу (iNils вам тут даже даты дал)
2) комп пользователя настроен неверно

Со вторым вариантом придется смириться - может у пользователя вообще часы системы даже с местным временем не связаны никак :)

add:
Зачем вы тут пример повторили, где тупо вбито зимнее время (+3)?
Вы же сказали, что знаете как прибавление к Гринвичу рассчитывать?

add2:
Даю подсказку. Прибавление к Гринвичу надо рассчитывать динамически, а не статически.

iNils 07.06.2008 19:31

Цитата:

Сообщение от chingachgoog (Сообщение 744387)
В Москве часовой пояс +2.
Местное время для Москвы= Гринвич + часовой пояс (2) + декретное время (+1) + сезонное (+1 летом)
Флеш знает только смещение между системным временем и Гринвичем.

Опять смотрим пост 10, время -180 и -240, что соответствует -3 и -4 часам. Не надо ничего прибавлять, декретное время учитывается.

chingachgoog 07.06.2008 19:38

Цитата:

Сообщение от iNils (Сообщение 744389)
Не надо ничего прибавлять, декретное время учитывается.

Я и не говорил, что декретное время системой не учитывается.
Я говорил, что часовой пояс в Москве +2, а не +3.

Смещение getTimezoneOffset не подойдет в следующем случае:
у пользователя верное время по Гринвичу, но не установлена галка о летнем времени (т.е. его комп показывает летом на час меньше)

iNils 07.06.2008 19:42

Цитата:

Сообщение от chingachgoog (Сообщение 744392)
Смещение getTimezoneOffset не подойдет в следующем случае:
у пользователя верное время по Гринвичу, но не установлена галка о летнем времени (т.е. его комп показывает летом на час меньше)

Да что же это такое))) Еще раз смотрим
Код:

dateWinter = new Date (2000, 0);
date = new Date ();
trace (dateWinter.getTimezoneOffset ()); // -180
trace (date.getTimezoneOffset ());      // -240

И что мы видим? Видим, что -180 != -240, значит (при условии, что дата в нужном промежутке в календаре) стоит галка перехода на летнее время. Если бы второй цифрой было бы -180, значит галка не стоит и надо добавить еще один час.

chingachgoog 07.06.2008 19:54

Цитата:

Сообщение от iNils (Сообщение 744389)
И что мы видим? Видим, что -180 != -240, значит (при условии, что дата в нужном промежутке в календаре) стоит галка перехода на летнее время. Если бы второй цифрой было бы -180, значит галка не стоит и надо добавить еще один час.

iNils, насколько я понял задача иная. Чтобы у любого пользователя, где бы он не находился (во Владивостоке или Кёниксберге, в Пекине или Мельбурне) флешовые часы показывали время по Москве. Для этого нам не надо знать getTimezoneOffset вообще! Надо лишь:
1) знать время по Гринвичу - а это как раз и высчитывается автоматически - кроме случая который я оговорил.
2) рассчитать по дате (день/месяц) смещение для Москвы от Гринвича (т.е. что прибавляем? 3 или 4?)

iNils 07.06.2008 19:58

Да хоть на северном полюсе.
Гринвич знаем? Знаем.
Пояс Москвы (ну хорошо, пояс + декретно) знаем? Знаем.
Что нужно узнать? Стоит ли галка учитывать переход не летнее или нет. Вот об этом и есть мой пост.

chingachgoog 07.06.2008 20:08

Цитата:

Сообщение от iNils (Сообщение 744398)
Да хоть на северном полюсе.
Гринвич знаем? Знаем.
Пояс Москвы (ну хорошо, пояс + декретно) знаем? Знаем.
Что нужно узнать? Стоит ли галка учитывать переход не летнее или нет. Вот об этом и есть мой пост.

А вот тут ваша ошибка. Вы знаете дату перехода В МОСКВЕ на летнее/зимнее время. Но вы никак не знаете дату перехода на летнее/зимнее время на Северном полюсе. Они разные для разных стран.
Поэтому придется использовать мой алгоритм.
И второе. Про ошибку. Ваш алгоритм не сработает, если человек установил комп правильно зимой, но не поставил галку (сейчас летом он у него показывает на один час меньше). А способ указанный мной покажет верное время для Москвы и в этом случае.

iNils 07.06.2008 20:20

Цитата:

Сообщение от chingachgoog (Сообщение 744401)
А вот тут ваша ошибка. Вы знаете дату перехода В МОСКВЕ на летнее/зимнее время. Но вы никак не знаете дату перехода на летнее/зимнее время на Северном полюсе. Они разные для разных стран..

Ну время же нужно Московское :)

Цитата:

Сообщение от chingachgoog (Сообщение 744401)
Ваш алгоритм не сработает, если человек установил комп правильно зимой, но не поставил галку (сейчас летом он у него показывает на один час меньше).

Сработает. Я проверял. Убрал галку и посмотрел результат, -180/-180

chingachgoog 07.06.2008 20:28

Цитата:

Сообщение от iNils (Сообщение 744406)
Ну время же нужно Московское :)

Вот ситуация. В стране пользователя время УЖЕ летнее. А в Москве ЕЩЕ нет. Ваш алгоритм покажет ЛЕТНЕЕ московское время, тогда как на самом деле там зимнее.
Или еще вариант. В стране пользователя вообще нет летнего времени.

Цитата:

Сообщение от iNils (Сообщение 744406)
Сработает. Я проверял. Убрал галку и посмотрел результат, -180/-180

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

iNils 07.06.2008 20:51

Код:

Вот ситуация. В стране пользователя время УЖЕ летнее. А в Москве ЕЩЕ нет. Ваш алгоритм покажет ЛЕТНЕЕ московское время, тогда как на самом деле там зимнее. Или еще вариант. В стране пользователя вообще нет летнего времени.
Нужно показать московское время. Так причем тут есть у пользователя летний переход или нет?
Код:

И что же тут сработало? Результат показывает, что у пользователя время сходно с зимним, не более того. Включена галка или нет - нам по-прежнему неизвестно.
Делаю скидку на конец 6-ти дневной рабочей недели и усталость, поэтому ты никак не можешь понять.
Что с в промежуток с последнго воскресенье октября по последнее воскресенье марта, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат. А с последнего воскресенье марта по последнее воскресенье октября, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат только, если галка НЕ стоит, а если стоит, то для текущего дня getTimezoneOffset () будет отличатся на -60, от getTimezoneOffset () для 1 января.

Читать до тех пор, пока не поймешь, что я прав :D

chingachgoog 07.06.2008 21:12

Цитата:

Сообщение от iNils (Сообщение 744412)
Нужно показать московское время. Так причем тут есть у пользователя летний переход или нет?

А к чему ваш код?
Чтобы показать, летнее время У ПОЛЬЗОВАТЕЛЯ или нет. Якобы.
Т.е. вы сравнением с зимним временем пытаетесь угадать - стоит ли галка (что само по себе неверно).
Но для московского времени ВООБЩЕ НЕ ВАЖНО - есть ли в стране пользователя летнее время, стоит ли у него галка, когда в его стране летнее время начинается. Важно одно - чтобы было правильное время по Гринвичу. getTimezoneOffset тут вообще не при чем.

Цитата:

Сообщение от iNils (Сообщение 744412)
Что с в промежуток с последнго воскресенье октября по последнее воскресенье марта, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат. А с последнего воскресенье марта по последнее воскресенье октября, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат только, если галка НЕ стоит, а если стоит, то для текущего дня getTimezoneOffset () будет отличатся на -60, от getTimezoneOffset () для 1 января.

Ага. НО ТОЛЬКО В ТОМ СЛУЧАЕ если пользователь живет в России. :)
И в том случае ЕСЛИ МЫ ПРОВЕРИМ день и месяц (а в этом случае нам опять getTimezoneOffset не нужен).

Цитата:

Сообщение от iNils (Сообщение 744412)
Читать до тех пор, пока не поймешь, что я прав :D

Не правоты чьей-то ради, а токмо ради истины :)
Ну да ладно, угар 6-и дневной рабочей недели пройдет - может все станет ясно.

nur 07.06.2008 22:39

я гляжу тут сурьезная батальщина развернулась :D

сделаем проще
что в этот код и куда нужно вписать, чтобы часовая стрелка переместилась на час вперед, когда перейдем на летнее время, и на час назад, в тот день, когда перейдем на зимнее время? :away:

Цитата:

onClipEvent (enterFrame) {
currentTime = new Date();
currentHour = currentTime.getUTCHours()+3;
currentMinute = currentTime.getUTCMinutes();
hourState._rotation = (currentHour*30)+(currentMinute/2);
}

iNils 07.06.2008 22:45

Цитата:

Сообщение от nur (Сообщение 744429)
что в этот код и куда нужно вписать, чтобы часовая стрелка переместилась на час вперед, когда перейдем на летнее время, и на час назад, в тот день, когда перейдем на зимнее время? :away:

по Москве? и не важно, есть в поясе юзера летнее время или нет?

nur 07.06.2008 23:17

да :victory:
потому что оно есть в Москве

nur 09.06.2008 18:21

так какой будет скрипт?

etc 10.06.2008 02:04

Цитата:

Сообщение от nur (Сообщение 744710)
так какой будет скрипт?

А это требование? Пишите сами.


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

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