Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   доработка скрипта обратного отсчета (https://javascript.ru/forum/css-html/27798-dorabotka-skripta-obratnogo-otscheta.html)

Mrjoey 25.04.2012 11:26

доработка скрипта обратного отсчета
 
День добрый!

такая ситуация, есть скрипт который считает оставшееся время до назначенного дня, подскажите, что нужно сделать чтобы он считал не до 04.05.2012, 00:00 (фактическое начало дня), а например до 04.05.2012, 15:15?

//Скрипт обратного отсчета времени 

var eventstr = "Чемпионат мира по хоккею 2012: расписание матчей"; //Эта строка выводиться по окончанию отсчета
var countdownid = document.getElementById("countdown"); //ID элемента в который выводится время

var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

function CountDowndmn(yr,m,d){
	cdyear=yr;
	cdmonth=m;
	cdday=d;
	var today=new Date();
	var todayy=today.getYear();
	if (todayy < 1000)
	todayy+=1900;
	var todaym=today.getMonth();
	var todayd=today.getDate();
	var todayh=today.getHours();
	var todaymin=today.getMinutes();
	var todaysec=today.getSeconds();
	var todaystring=montharray[todaym]+" "+todayd+", "+todayy+" "+todayh+":"+todaymin+":"+todaysec;
	futurestring=montharray[m-1]+" "+d+", "+yr
	dd=Date.parse(futurestring)-Date.parse(todaystring);
	dday=Math.floor(dd/(60*60*1000*24)*1);
	dhour=Math.floor((dd%(60*60*1000*24))/(60*60*1000)*1);
	dmin=Math.floor(((dd%(60*60*1000*24))%(60*60*1000))/(60*1000)*1);
	dsec=Math.floor((((dd%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1);
	if(dday<=0&&dhour<=0&&dmin<=0&&dsec<=1){
	countdownid.innerHTML=eventstr;
return
}
else {
	var lastchar = ""+dsec;	lastchar = lastchar.substring(lastchar.length-1,lastchar.length);
	var dsecstr = "секунд";
	if (lastchar=="1") { dsecstr = "секунда"; }
	if ((lastchar=="2")||(lastchar=="3")||(lastchar=="4")) { dsecstr = "секунды"; }
	
	lastchar = ""+dmin;	lastchar = lastchar.substring(lastchar.length-1,lastchar.length);
	var dminstr    = "минут";
	if (lastchar=="1") { dminstr = "минута"; }
	if ((lastchar=="2")||(lastchar=="3")||(lastchar=="4")) { dminstr = "минуты"; }

	lastchar = ""+dhour;	lastchar = lastchar.substring(lastchar.length-1,lastchar.length);
	var dhourstr   = "часов";
	if (lastchar=="1") { dhourstr = "час"; }
	if ((lastchar=="2")||(lastchar=="3")||(lastchar=="4")) { dhourstr = "часа"; }

	lastchar = ""+dday;	lastchar = lastchar.substring(lastchar.length-1,lastchar.length);
	var ddaystr = "дней";
	if (lastchar=="1") { ddaystr = "день"; }
	if ((lastchar=="2")||(lastchar=="3")||(lastchar=="4")) { ddaystr = "дня"; }

	countdownid.innerHTML="До Чемпионата мира по хоккею 2012: <br> "+dday+ " " +ddaystr+",  "+dhour+" "+dhourstr+", "+dmin+" "+dminstr+" и "+dsec+" "+dsecstr;

	
}
setTimeout("CountDowndmn(cdyear,cdmonth,cdday)",1000);
}

CountDowndmn(2012,05,04); //Дата отсчета: год, месяц, число


т.е. там:
отсчёт: год, месяц, число
А необходим: год, месяц, число, час, минута.

Спасибо.


Mrjoey

Mrjoey 25.04.2012 17:44

мог бы кто нибудь подсказать?

bes 25.04.2012 23:27

Что мешает добавить в расчёт необходимое вам время, переводите текущее и нужное время в секунды, находите разницу по времени и вычленяете из этой разницы годы, месяцы, дни, часы, минуты и секунды.

Mrjoey 26.04.2012 09:13

bes, мог бы подсказать код? понимаю общие принципы, но все же чайник в javascript.

bes 26.04.2012 13:20

Насколько я понял, ваш пример рабочий, не хватает только обратного отсчёта от необходимого времени в момент наступления нужного дня (проверите это при помощи if).

Код:


  allSecondsNow = todayh*3600 + todaymin*60 + todaysec;
  //x и y - нужные вам часы и минуты, с которых будет происходить обратный отсчёт
  allSecondsFrom = x*3600 + y*60;
  dif = allSecondsFrom - allSecondsNow;
  //нужные вам оставшиеся часы, минуты и секунды
  h = parseInt(dif/3600); 
  m =parseInt((dif - h*3600)/60);
  s = dif - h*3600 - m*60;

Для вывода можете использовать условия вида (h < 10 ? "0" : "").

Denizz 26.04.2012 14:36

Или можно задать дату конкретным числом с минутами-секундами :
var d=new Date(2012,04,04,15,15,0);
var today=new Date();
var dRest=Math.floor((d.getTime()-today.getTime())/(1000*60*60*24))

где dRest - количество оставшихся дней. Если надо уберете из знаменателя лишнее (1000*60*60*24) получите оставшиеся минуты, часы и т.п. А дальше функцию обратного счета нужно сделать...

Mrjoey 27.04.2012 11:56

Цитата:

Сообщение от Denizz (Сообщение 171411)
Или можно задать дату конкретным числом с минутами-секундами :
var d=new Date(2012,04,04,15,15,0);
var today=new Date();
var dRest=Math.floor((d.getTime()-today.getTime())/(1000*60*60*24))

где dRest - количество оставшихся дней. Если надо уберете из знаменателя лишнее (1000*60*60*24) получите оставшиеся минуты, часы и т.п. А дальше функцию обратного счета нужно сделать...

Спасибо!

Denizz 27.04.2012 22:56

Вот мой вариант функции :
function myTimer() {
var d=new Date(2012,04,04,15,15,0);
var today=new Date();
var dRest = Math.floor((d.getTime()-today.getTime())/(1000*60*60*24))
var sec = 60 - today.getSeconds(); 
var min = 15 - today.getMinutes();
var hour = 15 - today.getHours();
var body = document.getElementsByTagName("body")[0];
var cont = document.createElement('div');
var elem = document.createElement('div');

cont.appendChild(elem);
body.appendChild(cont);

	var a = setInterval ( function() {
		sec--;
			
		if ( sec==0 ) {
		sec = 59;
		min--;
				
		} else if (min < 0) {
		min = 60 + min;
		hour--;
		}
		
		if ( sec < 10 )  {
		brS = ":0"; //добавить перед секундами 0, если число не двузначное
		} else { brS = ":"} ;
		
		if ( min < 10 )  {
		brM = ":0"; //добавить перед минутами 0, если число не двузначное
		} else { brM = ":"} ;
		
		if ( hour < 0 ) {
		hour = 24 + hour;
		}	
			
		
		elem.innerHTML = hour + brM + min + brS + sec; 
		},1000 );

}
myTimer();

Надеюсь у вас получилось лучше ))

vadimon 05.08.2013 11:59

И как в итоге должен выглядеть код?

ivalerav 30.12.2013 00:02

Изменить вот здесь:
function CountDowndmn(yr,m,d,hh,mm,ss){
	cdyear=yr;
	cdmonth=m;
	cdday=d;
	cdhour=hh;
	cdmin=mm;
	cdsec=ss;

Здесь:
futurestring=montharray[m-1]+" "+d+", "+yr+" "+hh+":"+mm+":"+ss;

И здесь:
setTimeout("CountDowndmn(cdyear,cdmonth,cdday,cdhour,cdmin,cdsec)",1000);}


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