![]() |
|
||||||||||
|
|||||
|
[+4 12.12.07]
Регистрация: Dec 2007
Сообщений: 14
|
Здравствуйте.
Возникла следующая проблема: Необходимо создать обратный отсчет от заданной даты. Дату можно получить только через Flashvars.. Тот пример, который нашел в поиске дату не понимает, точнее, я не понимаю, как её туда передать.. // var interval:Object = {}; // var new_year_day = new Date(2009,11,17,18,40,00); // наш новый год. или какой там он уж будет нужен на день прочтения этого текста. AsBroadcaster.initialize(Date.prototype); // инициализируем объект ДАТА... неважно что это значит :) new_year_day.addListener(this); // добавляем на прослушку обновлений. // var sec_count = 0; // interval.id = setInterval(function () { sec_count += 1000; if (_root.now_time != undefined && _root.now_time != null) { var now = new Date(_root.now_time*1000+sec_count); // задаем время с сервера //(это если хитрый юзер захочет поменять системное время у себя на компе и до срока посмотреть что будет). } else { var now = new Date(); // Это сиюминутная дата. тоесть сейчас. если не задано с сервера. } var d:Number = Math.floor((new_year_day.getTime()-now.getTime())/86400000); //86400000 - милисекунд в сутках // подсчет разницы var a:Number = Math.abs(new_year_day.getHours()-now.getHours()); var b:Number = Math.abs(new_year_day.getMinutes()-now.getMinutes()); var c:Number = Math.abs(new_year_day.getSeconds()-now.getSeconds()); var h:Number = Math.abs(a); var m:Number = Math.abs(b); var s:Number = Math.abs(59-c); // транслируем событие обновления (сейчас-до НГ) now.broadcastMessage("updateTime", d, h, m, s); if (d<0) { // С Новым Годом!! now.broadcastMessage("OnNewYearCome"); clearInterval(interval.id); // все хватит. отсчитали. } }, 1000, this); // // Это я думаю можно оставить без комментариев. this.updateTime = function(d, h, m, s) { // поскольку это не литературынй вечер, то уж как есть без склонения обойдемся. var str = "До Новго 2007 Года осталось "+d+"дня, "+h+" часа "+m+" минут и "+s+" секунд."; //trace(str); txt.text = str; }; this.OnNewYearCome = function() { //с этого места можно запускать зайчиков, белочек, феерверки и Дед Мороза на санках. txt.text = "Здравствуй йолка новый год!"; }; // Готово То есть надо сделать как-то так: t=2009,11,17,18,40,00 var new_year_day = new Date(t); только такая конструкция не работает.. Помогите, пожалуйста.. ![]() Добавлено через 2 часа 25 минут ну, или, может предложите другой какой вариант, как можно сделать.. Надо сделать счетчик "Осталось времени:". Через флэшварс можем получить дату и время, которые еще не наступили. Нужно чтоб счетчик показывал разницу между текущим временем и датой из флэшварс.. Ну и было бы совсем хорошо, если бы текущую дату он брал с сервера, а не с клиента.. Просто совсем не понятно, что делать с датой, полученной из флэшварс.. Последний раз редактировалось rooty; 17.12.2009 в 20:23. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
yourDate = new Date(2010, 0, 1); yourDateMsec = yourDate.getTime(); F_countDown = function () { nowDate = new Date(); nowDateMsec = nowDate.getTime(); var msec = yourDateMsec-nowDateMsec; if (msec<=0) { } else { var sec = Math.floor(msec/1000); var min = Math.floor(sec/60); var hour = Math.floor(min/60); var day = Math.floor(hour/24); sec %= 60; min %= 60; hour %= 24; time_txt.text = " До Нового года осталось: Дней: "+day+", Часов: "+hour+", Минут: "+min+", Секунд: "+sec; } }; interval = setInterval(F_countDown, 1000); F_countDown(); |
|
|||||
|
[+4 12.12.07]
Регистрация: Dec 2007
Сообщений: 14
|
veles2008, спасибо!
Только.. все равно непонятно, куда значение из Flashvars подставлять.. ![]() yourDate = new Date(2010, 0, 1); Как сюда подставить нужную дату? Чтоб не руками вписывать, а через переменную? Допустим, в переменной t содержится дата в таком формате 2009,11,17,18,40,00.. Как этой переменной пользоваться? t=2009,11,17,18,40,00.. ее в new Date не подставить ![]() Если дату руками вписывать - то все отлично работает, но если мы получаем дату из кода страницы, на которой отображен ролик? Новый год тут не при чем.. В Flashvars задается дата (она может быть разной, но больше текущей) и таймер должен считать, сколько до нее осталось времени.. |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Используйте .split(",") к дате, которую получили, функция вернет массив значений - год, месяц, число и так далее, потом подставляйте в new Date()
Только учтите, что значение myDate должно быть без пробелов.
__________________
hauts.ru Последний раз редактировалось Hauts; 18.12.2009 в 07:04. |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
Наверное так
|
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
там с 2010 года нужно начинать. При желании поменяете
|
|
|||||
|
[+4 12.12.07]
Регистрация: Dec 2007
Сообщений: 14
|
СПАСИБО!!
![]() ОЧЕНЬ помогли (прошу прощения за капс, действительно очень рад ). Собрал написанный вами код - все заработало ![]() Только осталось два вопроса: ![]() 1. veles2008, не открыть исходник вашего примера.. Какая версия Флэш нужна? Я до сих пор 8-ой пользуюсь.. 2. Есть ли возможность считать разницу с временем сервера?.. Т.е. "полученная из флэшварс дата" минус "текущая дата сервера".. Просто если будет браться клиентское время - то разница получится разной у клиента из Владивостока и у клиента из Москвы, однако действие над sql-базой произойдет ровно по времени сервера.. Соответственно, один из клиентов будет обманут.. часов на 10.. ![]() |
|
|||||
|
Регистрация: Sep 2008
Сообщений: 158
|
1. Повтор для 8
2. Конечно с сервера |
|
|||||
|
[+4 12.12.07]
Регистрация: Dec 2007
Сообщений: 14
|
Эх.. ну вот, долго ли-коротко ли, но пришло время выложить сей мувик на сервер..
И, к сожалению, работает не так, как нужно ![]() Вот код, который получился: var myDate = _level0.time_over; // берем дату var dates = myDate.split(","); // делим по запятым var yourDate = new Date(dates[0], dates[1], dates[2], dates[3], dates[4], dates[5]); // подставляем значения yourDateMsec = yourDate.getTime(); F_countDown = function () { nowDate = new Date(); nowDateMsec = nowDate.getTime(); var msec = yourDateMsec-nowDateMsec; if (msec<=0) { setProperty ("txt", _visible, false); setProperty ("line", _visible, false); } else { setProperty ("txt", _visible, true); setProperty ("line", _visible, true); var sec = Math.floor(msec/1000); var min = Math.floor(sec/60); var hour = Math.floor(min/60); var day = Math.floor(hour/24); sec %= 60; min %= 60; hour %= 24; txt.text = "Осталось: "+day+" дней, "+hour+" часов, "+min+" минут, "+sec+" секунд"; } }; interval = setInterval(F_countDown, 1000); F_countDown(); Почему на локальном компе работает отлично.. А, вот, при просмотре с сервера - не показывает line и txt? Последний раз редактировалось rooty; 05.03.2010 в 11:49. |
|
|||||
|
Регистрация: Jan 2010
Сообщений: 25
|
попробуйте так
впринципе одно и то же, но может поможет...
Последний раз редактировалось Maximer; 03.03.2010 в 22:52. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:13. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|