Просмотр полной версии : Как сделать таймер с обратным отчетом до конкретной даты?
Feniks000
06.05.2013, 02:55
Добрый вечер.
Перегуглил ничего не нашел... нашел, но там без объяснения и с ошибками... Я неделю как начал сразу с практике, теория мне не дается.
Можете пожалуйста помочь.
Есть описание класса Date (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/Date.html). Только что-то я делаю не так. Это я про вторую часть эксперимента. В первой понятно, что я неправильно считаю количество дней, ибо не в каждом месяце их по 30. Но это не так странно, как вывод из второй части. Понятно, что между future и current где-то 32 минуты, а diffDate выдает нам аж 4 дня. Ну-ка, товарищи, помогите разобраться.
// Конструктор без параметров создает объект класса Date,
// который содержит текущие дату и время
var current:Date = new Date();
// Создаем желаемую дату, близкую к текущей
var future:Date = new Date(2013, 4, 6, 12, 0, 0, 0);
// Считаем разницу
var diff:int = future.getTime() - current.getTime();
trace("diff = " + diff);
var ms:int = diff % 1000; diff /= 1000;
var sec:int = diff % 60; diff /= 60;
var min:int = diff % 60; diff /= 60;
var hours:int = diff % 24; diff /= 24;
var days:int = diff % 30; diff /= 30;
// Вывод
trace("days = " + days);
trace("hours = " + hours);
trace("min = " + min);
trace("sec = " + sec);
trace("ms = " + ms);
// А вот это интересно ( вторая часть эксперимента )
var diffDate:Date = new Date();
diffDate.setTime(future.getTime() - current.getTime());
trace(future + " | " + future.getTime());
trace(current + " | " + current.getTime());
trace(diffDate + " | " + diffDate.getTime());
trace("days = " + diffDate.getDay());
trace("hours = " + diffDate.getHours());
trace("min = " + diffDate.getMinutes());
trace("sec = " + diffDate.getSeconds());
trace("ms = " + diffDate.getMilliseconds());
Вывод такой:
diff = 1892695
days = 0
hours = 0
min = 31
sec = 32
ms = 695
Mon May 6 12:00:00 GMT+0400 2013 | 1367827200000
Mon May 6 11:28:27 GMT+0400 2013 | 1367825307305
Thu Jan 1 04:31:32 GMT+0400 1970 | 1892695
days = 4
hours = 4
min = 31
sec = 32
ms = 695
Добавлено через 2 минуты
При этом видно, что минуты, секунды и миллисекунды совпадают в обеих частях. А вот дни и часы diffDate выдает странные.
Feniks000, вопрос нужно раскрывать не только в заголовке темы, но и в самом сообщении.
Idon'tKnow
06.05.2013, 18:26
// А вот это интересно ( вторая часть эксперимента )
var diffDate: Date = new Date();
diffDate.setTime(future.getTime() - current.getTime());
trace(future + " | " + future.getTime());
trace(current + " | " + current.getTime());
trace(diffDate + " | " + diffDate.getTime());
trace("days = " + diffDate.getDay());
trace("hours = " + diffDate.getHours());
trace("min = " + diffDate.getMinutes());
trace("sec = " + diffDate.getSeconds());
trace("ms = " + diffDate.getMilliseconds());
Вывод такой:
diff = 1892695
days = 0
hours = 0
min = 31
sec = 32
ms = 695
Mon May 6 12:00:00 GMT+0400 2013 | 1367827200000
Mon May 6 11:28:27 GMT+0400 2013 | 1367825307305
Thu Jan 1 04:31:32 GMT+0400 1970 | 1892695
days = 4
hours = 4
min = 31
sec = 32
ms = 695
Добавлено через 2 минуты
При этом видно, что минуты, секунды и миллисекунды совпадают в обеих частях. А вот дни и часы diffDate выдает странные.
Дело в том, что :
1. getDay() - возвращает день недели (0-воскресенье, 1-понедельник...). А возвращает она 4 по той причине, что в значении diffDate.getTime() лежит 1892695 . По умолчанию это значение прибавляется к значению 1 января 1970 года, а это и есть 4-ый день недели, он же - четверг. Т.е иными словами, она возвращает день недели объекта Date, удаленного на значение getTime().
2. С getHours() та же самая проблема, и, если обратите внимание, увидите, вот что:
Thu Jan 1 04:31:32 GMT+0400 1970 | 1892695 - Вот и есть те самые 4 часа. :)
Вроде так, если я не напутал что-либо.
С четвергом понятно, спасибо. Действительно, Thu как бы намекает. И да, в hours = 4 виноват GMT+0400. Если использовать UTC версии функций, то все будет как по маслу.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.