Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Нужен таймер (https://javascript.ru/forum/dom-window/35916-nuzhen-tajjmer.html)

Woldor 26.02.2013 19:37

Нужен таймер
 
Нужен таймар для сайта который будет одщитавать время до 7:00 затем до 15:00 и до 23:00 и снова 7:00 по московськом времени.:help:
Зараня очень признательный за помощь.

рони 26.02.2013 23:29

Woldor, таймер по местному времени
:cray:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
  <title></title>
</head>
<body><div id = 'show'></div>
<script type="text/javascript">
function two(a) {
    return (9 < a ? "" : "0") + a
}
function formatTime(a) {
    a = Math.floor(a / 1E3);
    var c = Math.floor(a / 60),
        d = Math.floor(c / 60);
    a %= 60;
    c %= 60;
    return two(d) + " : " + two(c) + " : " + two(a)
}
function Time() {
    var a = new Date, c = [7, 15, 23, 7], d = [], e = a.getDate() + 1, b = 0;
    for (; b < c.length; b++)
    a.setHours(c[b], 0, 0, 0),
    3 == b && a.setDate(e),
    d[b] = a.getTime();
    for (b = 0; b < c.length && !(a = d[b] - (new Date).getTime(), 0 < a); b++);
    document.getElementById("show").innerHTML = "До " + c[b] + " осталось " + formatTime(a);
    window.setTimeout(Time, 1E3)
};
Time()
</script>
</body>
</html>

Woldor 26.02.2013 23:52

а под московское время подогнать можна а то эта имеет бальшое значения

рони 27.02.2013 00:25

Цитата:

Сообщение от Woldor
под московское время подогнать можна

можно если брать время с сервера но это отдельная тема для раздела работа.

Woldor 27.02.2013 01:55

а что отвичает за поточное время

Deff 27.02.2013 04:11

Цитата:

Сообщение от рони
можно если брать время с сервера но это отдельная тема для раздела работа.

Да пофег имхо - берешь по гринвичу http://javascript.ru/Date.UTC и добавляшь смещение москвы

ОлегА 27.02.2013 11:38

вот моё изобретение, не много корявое, но работает, 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: 'Всё, хорош работать, бегите домой!'}
            ]
        ]
    );

рони 27.02.2013 12:32

Цитата:

Сообщение от Deff
Да пофег имхо

точное время и таймзону без сервера на компьюторе взять неоткуда, при условии что время и зона на компе выставлены правильно из-за смены зимнего/летнего если она есть, таймзону в скрипте придётся два раза в год корректировать. устанвливать дату в формат UTC нет необходимости, достаточно знать разницу между местной таймзоной и московской.
Вариант таймера с коррекцией на московское время...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
  <title></title>
</head>
<body><div id = 'show'></div>
<script type="text/javascript">
function two(a) {
    return (9 < a ? "" : "0") + a
}
function formatTime(a) {
    a = Math.floor(a / 1E3);
    var c = Math.floor(a / 60),
        d = Math.floor(c / 60);
    a %= 60;
    c %= 60;
    return two(d) + " : " + two(c) + " : " + two(a)
}
function Time() {
    var a = new Date, c = [7, 15, 23, 7], d = [], e = a.getDate() + 1, b = 0, m = -240 - a.getTimezoneOffset();
    for (; b < c.length; b++)
    a.setHours(c[b], m, 0, 0),
    3 == b && a.setDate(e),
    d[b] = a.getTime();
    for (b = 0; b < c.length && !(a = d[b] - (new Date).getTime(), 0 < a); b++);
    document.getElementById("show").innerHTML = "До " + c[b] + " : 00 по Москве осталось " + formatTime(a);
    window.setTimeout(Time, 1E3)
};
Time()
</script>
</body>
</html>

правильность работы скрипта проверьте кому нетрудно с немосковским временем.

Woldor 28.02.2013 04:01

работает идеально большое спасибо
еще пожалуйста отметь места которое нужно изменить при переходе на летнее время

рони 28.02.2013 08:33

Цитата:

Сообщение от Woldor
нужно изменить

значение выдаст алерт
var a = new Date;
alert(a.getTimezoneOffset())


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