Показать сообщение отдельно
  #7 (permalink)  
Старый 27.02.2013, 11:38
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

вот моё изобретение, не много корявое, но работает, 1-ым параметром подаешь 1-ую дату до которой надо отсчитать, далее 2-ым параметром в массиве подаем, другие даты, после 1-ой, повторяюсь код сырой, можно упростить, просто лень, рабоатет и ладно=)
function timer( objname, mysqldate, attr, b_next ){
        //var y, m, d, h=0, i=0, s=0;
        h=0; i=0; s=0;
        comment_start = attr.start!=undefined ? attr.start : '';
        comment_end   = attr.end  !=undefined ? attr.end   : mysqldate+' - эта дата уже прошла!';
        
        if( ymd = /^(\d\d\d\d)-(\d\d)-(\d\d)/.exec(mysqldate) ){
            y = ymd[1];
            m = Number(ymd[2])-1;
            d = ymd[3];        
            //alert('y=>'+y+' m=>'+m+' d=>'+d);
            if( his = /(\d\d):(\d\d):(\d\d)$/.exec(mysqldate) ){
                h = his[1];
                i = his[2];
                s = his[3];
                //alert('h=>'+h+' i=>'+i+' s=>'+s);
            }
        } else {
            $( objname ).text(mysqldate+ '- не соответствует формату YYYY-MM-DD [H:i:s]');
            return;
        }
        
        finishday = new Date( y, m, d, h, i, s );    
        endTS = finishday.getTime();
            
        var intervalid = setInterval(function(){
            now = new Date();
            totalRemains = (endTS - now.getTime());                        
            if (totalRemains>1){
                RemainsSec=(parseInt(totalRemains/1000));
                RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));            
                secInLastDay=RemainsSec-RemainsFullDays*24*3600;
                RemainsFullHours=(parseInt(secInLastDay/3600));
                if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};
                secInLastHour=secInLastDay-RemainsFullHours*3600;
                RemainsMinutes=(parseInt(secInLastHour/60));
                if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};                        
                lastSec=secInLastHour-RemainsMinutes*60;                            
                if (lastSec<10){lastSec="0"+lastSec};                
                $( objname ).html( comment_start + (RemainsFullDays ? "<span>"+RemainsFullDays+"дн.</span> " :"")+RemainsFullHours+"ч. "+RemainsMinutes+"м. "+lastSec+"с.");
            } else {
               clearInterval(intervalid); 
               
               if(b_next && typeof b_next==='object'){
                   next = b_next[3]!=undefined ? b_next[3] : '';
                   timer(b_next[0], b_next[1], b_next[2], next); 
               } else {
                   $( objname ).text( comment_end );
               }
            }
        },1000);
    }
         
    timer(
        '.timer', "<?php echo date('Y-m-d 12:00:00');?>", {start: 'До обеда осталось: '},[
            '.timer', "<?php echo date('Y-m-d 13:15:00');?>", {start: 'Все бежим на ОБЕД! До конца обеда осталось: '},[
                '.timer', "<?php echo date('Y-m-d 17:00:00');?>", {start: 'До конца рабочего дня осталось: ', end: 'Всё, хорош работать, бегите домой!'}
            ]
        ]
    );
Ответить с цитированием