Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Остановился таймер (https://javascript.ru/forum/dom-window/43336-ostanovilsya-tajjmer.html)

iskander83 02.12.2013 01:30

Остановился таймер
 
есть такой таймер
<div id="timer">
            <div id="d"  class="blueDigit" style="display:none;">00</div>
    
                <div id="h"   class="blueDigit">00</div>
      <span>:</span>
                <div id="m"   class="blueDigit">00</div>
     <span>:</span>
                <div id="s"  class="redDigit">01</div>
              </div>
              <div class="timeWords" >
                <div id="ds" style="display:none;">дня</div>

                <div id="hs">часов</div>

                <div id="ms">минут</div>

                <div id="ss">секунд</div>
             
            </div>


на днях вдруг перестал работать, а это не есть хорошо, тк на нескольких сайтах он стоит, кто может помочь исправить проблему?
вот код
document.getElementsByTagName("body")[0].onload=setTimer;

function setTimer()
{
	var maxDays = 3;
	var time = "00:00:00"; 
	
    var now = new Date();	
	var date=now.getDate();
	var year=now.getFullYear();
	var month=now.getMonth()+1;
	if (month==12) month=0;
	switch(month) {
		case 0:month="January";break
		case 1:month="February";break
		case 2:month="March";break
		case 3:month="April";break
		case 4:month="May";break
		case 5:month="June";break
		case 6:month="July";break
		case 7:month="August";break
		case 8:month="September";break
		case 9:month="October";break
		case 10:month="November";break
		case 11:month="December";break
	}
	var daysReal=date%maxDays;
	var FullDate=year+","+month+",1";
    var endOfTimer = new Date(FullDate);//05:00:00"); "Jun,12,2015,"+
    var ms = (endOfTimer.getTime()-now.getTime());
	daysReal= Math.floor(ms/(1000*60*60*24));
    if (ms>1)
    {
        var sec=(parseInt(ms/1000));
        var days=(parseInt(sec/(24*60*60)));
        var secInLastDay=sec-days*24*3600;
        var hours=(parseInt(secInLastDay/3600));
        var secInLastHour=secInLastDay-hours*3600;
        var minutes=(parseInt(secInLastHour/60));
        var lastSec=secInLastHour-minutes*60;
		document.getElementById('d').innerHTML = daysReal;
		document.getElementById('h').innerHTML = ((hours<10)?(hours="0"+hours): hours);
		document.getElementById('m').innerHTML = ((minutes<10)?(minutes="0"+minutes): minutes);
		document.getElementById('s').innerHTML = ((lastSec<10)?(lastSec="0"+lastSec): lastSec);
		var daysStr = "дня";
		if(days==0 || days >= 5) daysStr = "дней"; else if(days==1)daysStr="день";
		var hourStr = "часов";
		if((hours>=2 && hours<=4) || hours>=22) hourStr="часа"; else if(hours==1 || hours==21) hourStr='час';
		var minStr="минут";
		if(minutes%10==1 && Math.floor(minutes/10)!=1) minStr="минута"; else if ((minutes%10>=2 && minutes%10<=4) && Math.floor(minutes/10)!=1) minStr="минуты";
		var secStr ="секунд";
		if(lastSec%10==1 && Math.floor(lastSec/10)!=1) secStr="секунда"; else if ((lastSec%10>=2 && lastSec%10<=4) && Math.floor(lastSec/10)!=1) secStr="секунды";
		document.getElementById('ds').innerHTML = daysStr;
		document.getElementById('hs').innerHTML = hourStr;
		document.getElementById('ms').innerHTML = minStr;
		document.getElementById('ss').innerHTML = secStr;
        setTimeout(setTimer,1000)
    }



}


он каждый месяц должен рестарт делать...
помогите професора!!!!!

рони 02.12.2013 03:07

iskander83,
строка 12 скрипта подумай при каких условиях month может стать 12 и что случится тогда с year
если думать совсем неохота job

iskander83 02.12.2013 18:26

я так и думал что ошибка тут, но как исправить?
и еще была ошибка в скрипте строка 11 вместо "+0" надо "+1" уже исправил...
но это делу не помогает...

lord2kim 02.12.2013 18:32

Цитата:

Сообщение от iskander83 (Сообщение 284077)
я так и думал что ошибка тут, но как исправить?
и еще была ошибка в скрипте строка 11 вместо "+0" надо "+1" уже исправил...
но это делу не помогает...

у вас в конструкции switch максимальный номер месяца = 11, почему же тогда вы на 12 строке сравниваете его с 12 ?
раз вы исправили в 11 строке, то нужно исправлять в switch-е...

рони 02.12.2013 18:51

Цитата:

Сообщение от lord2kim
то нужно исправлять в switch-е...

Цитата:

Сообщение от iskander83
"+1" уже исправил...
но это делу не помогает...



оба смотрите подсказку во 2 посте -- строка 11 исправлена строка 12 ещё нет ))) время пошло :dance:

iskander83 02.12.2013 18:59

:write: Время то идет.. А скрипт так и не работает...:cray:
:help: :help: :help:

iskander83 02.12.2013 19:07

а вот так то заработало!!!:victory:
var year=now.getFullYear()+1;

10я строка.
Что скажете?

lord2kim 02.12.2013 19:07

iskander83, наверное(((
например, почему у вас переменная daysReal 2 раза устанавливается (27, 31 строки)
проверьте что у вас записывается в переменную ms...

iskander83 02.12.2013 19:12

скрипт то не я сам писал поэтому хз...:blink:
"проверьте что у вас записывается в переменную ms..." не умею, но факт что все вроде работает теперь....

iskander83 02.12.2013 19:21

только очень странно работает теперь...
вот ссылка
дней показывает оставшихся до конца года - 363
НО!!! на локалке у меня показует как надо до конца месяца - 29!
почему?


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