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

rooty 17.12.2009 20:06

Передача даты
 
Здравствуйте.

Возникла следующая проблема:
Необходимо создать обратный отсчет от заданной даты. Дату можно получить только через Flashvars.. Тот пример, который нашел в поиске дату не понимает, точнее, я не понимаю, как её туда передать..

Код AS1/AS2:

//
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 = "Здравствуй йолка новый год!";
};
// Готово

Как бы значение 2009,11,17,18,40,00 передать через переменную?
То есть надо сделать как-то так:

t=2009,11,17,18,40,00
var new_year_day = new Date(t);

только такая конструкция не работает.. Помогите, пожалуйста.. :(

Добавлено через 2 часа 25 минут
ну, или, может предложите другой какой вариант, как можно сделать..

Надо сделать счетчик "Осталось времени:". Через флэшварс можем получить дату и время, которые еще не наступили. Нужно чтоб счетчик показывал разницу между текущим временем и датой из флэшварс..
Ну и было бы совсем хорошо, если бы текущую дату он брал с сервера, а не с клиента..

Просто совсем не понятно, что делать с датой, полученной из флэшварс..

veles2008 18.12.2009 00:29

Код AS1/AS2:

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();


rooty 18.12.2009 02:16

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 задается дата (она может быть разной, но больше текущей) и таймер должен считать, сколько до нее осталось времени..

Hauts 18.12.2009 07:01

Используйте .split(",") к дате, которую получили, функция вернет массив значений - год, месяц, число и так далее, потом подставляйте в new Date()

Код AS1/AS2:

var myDate = "2010,0,1"; // берем дату
var dates = myDate.split(","); // делим по запятым
var yourDate = new Date(dates[0], dates[1], dates[2]); // подставляем значения

Только учтите, что значение myDate должно быть без пробелов.

veles2008 18.12.2009 15:58

Вложений: 1
Наверное так

veles2008 18.12.2009 15:59

там с 2010 года нужно начинать. При желании поменяете

rooty 18.12.2009 16:37

СПАСИБО!! :)
ОЧЕНЬ помогли (прошу прощения за капс, действительно очень рад :) ). Собрал написанный вами код - все заработало :) :)

Только осталось два вопроса: :)
1. veles2008, не открыть исходник вашего примера.. Какая версия Флэш нужна? Я до сих пор 8-ой пользуюсь..
2. Есть ли возможность считать разницу с временем сервера?.. Т.е. "полученная из флэшварс дата" минус "текущая дата сервера".. Просто если будет браться клиентское время - то разница получится разной у клиента из Владивостока и у клиента из Москвы, однако действие над sql-базой произойдет ровно по времени сервера.. Соответственно, один из клиентов будет обманут.. часов на 10.. :(

veles2008 18.12.2009 16:46

Вложений: 1
1. Повтор для 8
2. Конечно с сервера

rooty 03.03.2010 18:44

Эх.. ну вот, долго ли-коротко ли, но пришло время выложить сей мувик на сервер..
И, к сожалению, работает не так, как нужно :(

Вот код, который получился:

Код AS1/AS2:

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?

Maximer 03.03.2010 22:49

Код AS1/AS2:

setProperty ("txt", _visible, false);

попробуйте так
Код AS1/AS2:

txt._visible = false;
//или
_root.txt._visible = false;

впринципе одно и то же, но может поможет...

rooty 04.03.2010 12:42

Maximer, спасибо.. Но не помогло.. :(


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

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