Помогите со счетчиком.

Тема в разделе "JavaScript", создана пользователем Lena_&9, 2 май 2014.

  1. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    Нужен счетчик обратного отсчета.
    Вот нашла скрипт
    Код:
    (function($){
      
       // Number of seconds in every time division
       var days   = 24*60*60,
         hours   = 60*60,
         minutes   = 60;
      
       // Creating the plugin
       $.fn.countdown = function(prop){
        
         var options = $.extend({
           callback   : function(){},
           timestamp   : 0
         },prop);
        
         var left, d, h, m, s, positions;
    
         // Initialize the plugin
         init(this, options);
        
         positions = this.find('.position');
        
         (function tick(){
          
           // Time left
           left = Math.floor((options.timestamp - (new Date())) / 1000);
          
           if(left < 0){
             left = 0;
           }
          
           // Number of days left
           d = Math.floor(left / days);
           updateDuo(0, 1, d);
           left -= d*days;
          
           // Number of hours left
           h = Math.floor(left / hours);
           updateDuo(2, 3, h);
           left -= h*hours;
          
           // Number of minutes left
           m = Math.floor(left / minutes);
           updateDuo(4, 5, m);
           left -= m*minutes;
          
           // Number of seconds left
           s = left;
           updateDuo(6, 7, s);
          
           // Calling an optional user supplied callback
           options.callback(d, h, m, s);
          
           // Scheduling another call of this function in 1s
           setTimeout(tick, 1000);
         })();
        
         // This function updates two digit positions at once
         function updateDuo(minor,major,value){
           switchDigit(positions.eq(minor),Math.floor(value/10)%10);
           switchDigit(positions.eq(major),value%10);
         }
        
         return this;
       };
    
    
       function init(elem, options){
         elem.addClass('countdownHolder');
    
         // Creating the markup inside the container
         $.each(['Days','Hours','Minutes','Seconds'],function(i){
           $('<span class="count'+this+'">').html(
             '<div>\
             <p class="position">\
               <span class="digit static">0</span>\
             </p>\
             </div>\
             <div>\
             <p class="position">\
               <span class="digit static">0</span>\
             </p>\
             </div>'
           ).appendTo(elem);
          
           if(this!="Seconds"){
             elem.append('<p>:</p><span class="countDiv countDiv'+i+'"></span>');
           }
         });
    
       }
    
       // Creates an animated transition between the two numbers
       function switchDigit(position,number){
        
         var digit = position.find('.digit')
        
         if(digit.is(':animated')){
           return false;
         }
        
         if(position.data('digit') == number){
           // We are already showing this number
           return false;
         }
        
         position.data('digit', number);
        
         var replacement = $('<span>',{
           'class':'digit',
           css:{
             top:0,
             opacity:0
           },
           html:number
         });
        
         // The .static class is added when the animation
         // completes. This makes it run smoother.
        
         digit
           .before(replacement)
           .removeClass('static')
           .animate({top:0,opacity:0},'fast',function(){
             digit.remove();
           })
    
         replacement
           .delay(100)
           .animate({top:0,opacity:1},'fast',function(){
             replacement.addClass('static');
           });
       }
    })(jQuery);
    
    
    Вот вывод счетчика на экран
    HTML:
    <div id="counter"></div>
    <script>
    $(function(){
        
       $('#counter').countdown({
         timestamp   : (new Date(2014, 5, 3)).getTime() + 01*01*01*60*1000
       });
      
    });
    </script>
    
    Вроде работает, но неправильно показывает дни.
    Подскажите, что можно исправить ?
     
  2. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    он правильно работает
    timestamp : (new Date(2014(год), 5(месяц), 3(число))).getTime()
    а в плюсе идут часы и секунды, не надо туда дни подставлять
     
  3. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    На экран выводит 31 : 06 : 34 : 25
    Я так поняла, начиная с конца - это секунды, минуты, часы и что такое 31 ?
    секунды, минуты, часы показывает правильно, а нужно обязательно и дни.
    Не поможете, я в JavaScript не очень.
     
  4. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    31 - это дни

    http://jsfiddle.net/b5vWk/
     
    Lena_&9 нравится это.
  5. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    В том-то и проблема, дни почему то показывает не верно.
    Ставлю
    timestamp : (new Date(2014, 5, 5)) Завтрашний день, а выводит на экран 31 (осталось дней) , часы,минуты, секунды - правельно.
    Как убрать тройку ? из числа 31
    Ставила 12 число - это через 8 дней => показывает осталось 38 дней (не знаю откуда берется )
     
  6. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    (new Date(2014, 5, 5)) это не завтра - это через месяц

    к сожаления ктото посчитал что дни в Date будут идти от 1 до 31
    а вот месяцы от 0(январь) до 11 )декабрь(
     
    Lena_&9 нравится это.
  7. Lena_&9

    Lena_&9

    Регистрация:
    23 фев 2014
    Сообщения:
    71
    Симпатии:
    98
    А не подскажите в каких это строчках, это можно исправить ?
    Не где не нашла похожих цифр
     
  8. kama812

    kama812

    Регистрация:
    30 мар 2013
    Сообщения:
    311
    Симпатии:
    195
    исправить это нельзя, так уж сделан javascript

    вот фикс что б нормально писать месяц по человечески http://jsfiddle.net/b5vWk/1/ , тут тут месяц 5 будет считаться за май, а не за июнь
     
    Lena_&9 нравится это.