доработка скрипта обратного отсчета
День добрый!
такая ситуация, есть скрипт который считает оставшееся время до назначенного дня, подскажите, что нужно сделать чтобы он считал не до 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 |
мог бы кто нибудь подсказать?
|
Что мешает добавить в расчёт необходимое вам время, переводите текущее и нужное время в секунды, находите разницу по времени и вычленяете из этой разницы годы, месяцы, дни, часы, минуты и секунды.
|
bes, мог бы подсказать код? понимаю общие принципы, но все же чайник в javascript.
|
Насколько я понял, ваш пример рабочий, не хватает только обратного отсчёта от необходимого времени в момент наступления нужного дня (проверите это при помощи if).
Код:
|
Или можно задать дату конкретным числом с минутами-секундами :
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) получите оставшиеся минуты, часы и т.п. А дальше функцию обратного счета нужно сделать... |
Цитата:
|
Вот мой вариант функции :
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(); Надеюсь у вас получилось лучше )) |
И как в итоге должен выглядеть код?
|
Изменить вот здесь:
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. |