Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Написал часики для обратного отсчета. Подскажите где слажал (https://javascript.ru/forum/misc/12000-napisal-chasiki-dlya-obratnogo-otscheta-podskazhite-gde-slazhal.html)

mrspd 26.09.2010 10:06

Вас всех тут на говнокод можно отправить смело. Если таймер, так и работать надо со временем!

var timer = new Object();
timer.get = function (year,month,day,hour,minute,second,msecond){
    
    var finish_time = new Date(year,month-1,day,hour,minute,second,msecond);    
    var start_time     = new Date();
    var diff = Math.round((finish_time.getTime() - start_time.getTime())/1000);
        
    timer.seconds     = diff % 60;
    timer.minutes     = Math.floor((diff/60) % 60);
    timer.hours       = Math.floor((diff/3600) % 24);
    timer.days       = Math.floor(diff/3600/24);
    
    console.log('Дней: '+timer.days+' - Часов: '+timer.hours+' - Минут:'+timer.minutes+' - Секунд:'+timer.seconds);
    setTimeout(function ()
    {
        timer.get(year,month,day,hour,minute,second,msecond);
    },1000);
}

// До конца света осталось
timer.get(2012,1,1,0,0,0,0);

with-love-from-siberia 26.09.2010 11:13

mrspd, не умничайте. Ваш пример, по сути, - модификация алгоритма, словесно описанного вот этой строкой
Цитата:

Сообщение от with-love-from-siberia
Сложить все, вычесть единицу и снова расложить по отдельным элементам

. Проблема в том, что некоторое начальное значение может формироваться на стороне сервера. Естественно, что должно быть создана переменная типа Date, а потом с ней уже работать. Но в данном случае, с моей стороны, желательно дать подсказки, чтобы вопрошающий додумался до решения сам (что к сожалению, не произошло).

mrspd 26.09.2010 11:20

Создать конструкцию из множества условий по праву просто нельзя назвать правильным кодом.

Кто вам мешает брать начальные значения с сервера?

Мой пример показывает как это можно вписать в 20 строк, при этом заметьте, там нет не одного условия. А с вашими ifswitchelse'овыми конструкциями, чёрт ногу сломит...

Помимо этого код более читабелен, даже без комментариев. Даже если вы свои if конструкции откомментируете, у вас в совокупности комментариев получится больше, чем у меня кода ;)

with-love-from-siberia 26.09.2010 11:32

mrspd, Я с Вами полностью согласен, что работу таймера лучше реализовать с переменными типа Date. Но так уж сложилось, что у автора данной темы данные уже сформированы и необходимо работать с ними. Хотя, он мог бы изменить (полагаю, что мог бы) свой алгоритм на сервере, чтобы временнАя переменная формировалась на сервере, а клиентская часть уже работала в ней.

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

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

t0xas 26.09.2010 18:22

Братья мир, я понял свои ошибки, драться не надо.
да принижать достоинство других не стоит, чтобы возвысить свое.
Всем спасибо. Я учусь и рад вашим подсказкам.


Часовой пояс GMT +3, время: 22:08.