Просмотр полной версии : часы, переход на летнее время
Подскажите как в этот коде сделать чтобы часы автоматически переходили на летнее и зимнее время
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/Летнее_время
в данном случае время берется несовсем с клента, а считается от гринвича, это нужно что бы в любом часов поясе флеш показывал точное московское время.
Но здесь не учитывается переход на летнее и зимнее время. Как сделать это в данном случае?
chingachgoog
07.06.2008, 17:26
currentTime.getUTCHours()+3; - это зимнее, +4 - летнее
смотрите даты (по Гринвичу) и выбираете нужное прибавление.
NB Часовой пояс у нас +2, но есть декретное время +1 и еще летнее время +1
это я знаю сколько прибавлять нужно.
как сделать чтобы они сами в нужное время менялись как на компе
chingachgoog
07.06.2008, 18:15
Так после того как вы определите правильное прибавление (3 или 4) по дате, они (часы) сами и поменяются на компе.
В чем проблема-то?
считается от гринвича, это время постоянное, оно вычисляется из времени установленного на компе путем вычитания или прибавление часового пояса.
Смена сезонного времени происходит только если поставленна галочка в настройках часах на компе, но при этом гринвич не меняется.
chingachgoog
07.06.2008, 18:39
Ну и в чем проблема-то? Гринвич-то всегда правильно показывает. Поставлена галочка или нет. От Гринвича и пляшите.
Единственный вариант ошибки - пользователь неустановил галочку перехода времени (т.е. пользуется зимним временем) и самостоятельно привел системное время к текущему (летнему). Но это ошибка пользователя и он прочувствует ее зимой.
проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!
проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!dateWinter = new Date (2000, 0);
date = new Date ();
trace (dateWinter.getTimezoneOffset ());
trace (date.getTimezoneOffset ());
У меня показывает -180 и -240, значит есть переход на летнее время. Надо также проверять, попадает ли date в промежуток: последнее воскресенье марта - последнее воскресенье октября
chingachgoog
07.06.2008, 19:03
проблема как сделать чтобы мои флешевые часы автоматически переходили на летнее время!!!
Они автоматически перейдут если вы правильно определили прибавление к Гринвичу, кроме отдельного случая указанного мной выше :)
Гринвич + пояс + если (последнее воскресенье марта < текущая дата < последнее воскресенье октября) { +1}
один час декретного времени забыли (см. выше)
собственно это я и указывал выше, как определение прибавления к Гринвичу, но nur говорит, что проблема не с этим... :)
во вложении часы с приведенным мной кодом.
chingachgoog, можно убедиться что сами часы не переходят на летнее время!!! :rtfm:
а каждые пол года менять флешку на сайте, это не вполне нормально :mad:
один час декретного времени забыли (см. выше)Не забыл. У нас пояс +3 зимой/+4 летом и флеш об этом знает.
chingachgoog, если нет конкретного решения проблемы, большая просьба не засорять тему ненужным флудом!!!
chingachgoog, можно убедиться что сами часы не переходят на летнее время!!! :rtfm:
Читайте пост номер 10, там сказано, как определить, был переход на летнее время или не был.
chingachgoog
07.06.2008, 19:24
Не забыл. У нас пояс +3 зимой/+4 летом и флеш об этом знает.
В Москве часовой пояс +2.
Местное время для Москвы= Гринвич + часовой пояс (2) + декретное время (+1) + сезонное (+1 летом)
Флеш знает только смещение между системным временем и Гринвичем.
chingachgoog, если нет конкретного решения проблемы, большая просьба не засорять тему ненужным флудом!!!
Решение я вам сказал еще в посте #4 :)
Поэтому есть две ситуации когда часы по Москве работать не будут:
1) вы неправильно посчитали прибавление к Гринвичу (iNils вам тут даже даты дал)
2) комп пользователя настроен неверно
Со вторым вариантом придется смириться - может у пользователя вообще часы системы даже с местным временем не связаны никак :)
add:
Зачем вы тут пример повторили, где тупо вбито зимнее время (+3)?
Вы же сказали, что знаете как прибавление к Гринвичу рассчитывать?
add2:
Даю подсказку. Прибавление к Гринвичу надо рассчитывать динамически, а не статически.
В Москве часовой пояс +2.
Местное время для Москвы= Гринвич + часовой пояс (2) + декретное время (+1) + сезонное (+1 летом)
Флеш знает только смещение между системным временем и Гринвичем.Опять смотрим пост 10, время -180 и -240, что соответствует -3 и -4 часам. Не надо ничего прибавлять, декретное время учитывается.
chingachgoog
07.06.2008, 19:38
Не надо ничего прибавлять, декретное время учитывается.
Я и не говорил, что декретное время системой не учитывается.
Я говорил, что часовой пояс в Москве +2, а не +3.
Смещение getTimezoneOffset не подойдет в следующем случае:
у пользователя верное время по Гринвичу, но не установлена галка о летнем времени (т.е. его комп показывает летом на час меньше)
Смещение 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
И что мы видим? Видим, что -180 != -240, значит (при условии, что дата в нужном промежутке в календаре) стоит галка перехода на летнее время. Если бы второй цифрой было бы -180, значит галка не стоит и надо добавить еще один час.
iNils, насколько я понял задача иная. Чтобы у любого пользователя, где бы он не находился (во Владивостоке или Кёниксберге, в Пекине или Мельбурне) флешовые часы показывали время по Москве. Для этого нам не надо знать getTimezoneOffset вообще! Надо лишь:
1) знать время по Гринвичу - а это как раз и высчитывается автоматически - кроме случая который я оговорил.
2) рассчитать по дате (день/месяц) смещение для Москвы от Гринвича (т.е. что прибавляем? 3 или 4?)
Да хоть на северном полюсе.
Гринвич знаем? Знаем.
Пояс Москвы (ну хорошо, пояс + декретно) знаем? Знаем.
Что нужно узнать? Стоит ли галка учитывать переход не летнее или нет. Вот об этом и есть мой пост.
chingachgoog
07.06.2008, 20:08
Да хоть на северном полюсе.
Гринвич знаем? Знаем.
Пояс Москвы (ну хорошо, пояс + декретно) знаем? Знаем.
Что нужно узнать? Стоит ли галка учитывать переход не летнее или нет. Вот об этом и есть мой пост.
А вот тут ваша ошибка. Вы знаете дату перехода В МОСКВЕ на летнее/зимнее время. Но вы никак не знаете дату перехода на летнее/зимнее время на Северном полюсе. Они разные для разных стран.
Поэтому придется использовать мой алгоритм.
И второе. Про ошибку. Ваш алгоритм не сработает, если человек установил комп правильно зимой, но не поставил галку (сейчас летом он у него показывает на один час меньше). А способ указанный мной покажет верное время для Москвы и в этом случае.
А вот тут ваша ошибка. Вы знаете дату перехода В МОСКВЕ на летнее/зимнее время. Но вы никак не знаете дату перехода на летнее/зимнее время на Северном полюсе. Они разные для разных стран..Ну время же нужно Московское :)
Ваш алгоритм не сработает, если человек установил комп правильно зимой, но не поставил галку (сейчас летом он у него показывает на один час меньше).Сработает. Я проверял. Убрал галку и посмотрел результат, -180/-180
chingachgoog
07.06.2008, 20:28
Ну время же нужно Московское :)
Вот ситуация. В стране пользователя время УЖЕ летнее. А в Москве ЕЩЕ нет. Ваш алгоритм покажет ЛЕТНЕЕ московское время, тогда как на самом деле там зимнее.
Или еще вариант. В стране пользователя вообще нет летнего времени.
Сработает. Я проверял. Убрал галку и посмотрел результат, -180/-180
И что же тут сработало? Результат показывает, что у пользователя время сходно с зимним, не более того. Включена галка или нет - нам по-прежнему неизвестно.
Вот ситуация. В стране пользователя время УЖЕ летнее. А в Москве ЕЩЕ нет. Ваш алгоритм покажет ЛЕТНЕЕ московское время, тогда как на самом деле там зимнее. Или еще вариант. В стране пользователя вообще нет летнего времени.Нужно показать московское время. Так причем тут есть у пользователя летний переход или нет?
И что же тут сработало? Результат показывает, что у пользователя время сходно с зимним, не более того. Включена галка или нет - нам по-прежнему неизвестно.Делаю скидку на конец 6-ти дневной рабочей недели и усталость, поэтому ты никак не можешь понять.
Что с в промежуток с последнго воскресенье октября по последнее воскресенье марта, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат. А с последнего воскресенье марта по последнее воскресенье октября, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат только, если галка НЕ стоит, а если стоит, то для текущего дня getTimezoneOffset () будет отличатся на -60, от getTimezoneOffset () для 1 января.
Читать до тех пор, пока не поймешь, что я прав :D
chingachgoog
07.06.2008, 21:12
Нужно показать московское время. Так причем тут есть у пользователя летний переход или нет?
А к чему ваш код?
Чтобы показать, летнее время У ПОЛЬЗОВАТЕЛЯ или нет. Якобы.
Т.е. вы сравнением с зимним временем пытаетесь угадать - стоит ли галка (что само по себе неверно).
Но для московского времени ВООБЩЕ НЕ ВАЖНО - есть ли в стране пользователя летнее время, стоит ли у него галка, когда в его стране летнее время начинается. Важно одно - чтобы было правильное время по Гринвичу. getTimezoneOffset тут вообще не при чем.
Что с в промежуток с последнго воскресенье октября по последнее воскресенье марта, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат. А с последнего воскресенье марта по последнее воскресенье октября, getTimezoneOffset () для текущего дня и 1 января выдаст нам один и тот же результат только, если галка НЕ стоит, а если стоит, то для текущего дня getTimezoneOffset () будет отличатся на -60, от getTimezoneOffset () для 1 января.
Ага. НО ТОЛЬКО В ТОМ СЛУЧАЕ если пользователь живет в России. :)
И в том случае ЕСЛИ МЫ ПРОВЕРИМ день и месяц (а в этом случае нам опять getTimezoneOffset не нужен).
Читать до тех пор, пока не поймешь, что я прав :D
Не правоты чьей-то ради, а токмо ради истины :)
Ну да ладно, угар 6-и дневной рабочей недели пройдет - может все станет ясно.
я гляжу тут сурьезная батальщина развернулась :D
сделаем проще
что в этот код и куда нужно вписать, чтобы часовая стрелка переместилась на час вперед, когда перейдем на летнее время, и на час назад, в тот день, когда перейдем на зимнее время? :away:
onClipEvent (enterFrame) {
currentTime = new Date();
currentHour = currentTime.getUTCHours()+3;
currentMinute = currentTime.getUTCMinutes();
hourState._rotation = (currentHour*30)+(currentMinute/2);
}
что в этот код и куда нужно вписать, чтобы часовая стрелка переместилась на час вперед, когда перейдем на летнее время, и на час назад, в тот день, когда перейдем на зимнее время? :away:по Москве? и не важно, есть в поясе юзера летнее время или нет?
да :victory:
потому что оно есть в Москве
так какой будет скрипт?
А это требование? Пишите сами.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.