25.04.2012, 11:26
|
Интересующийся
|
|
Регистрация: 12.09.2010
Сообщений: 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 в 11:54.
|
|
25.04.2012, 17:44
|
Интересующийся
|
|
Регистрация: 12.09.2010
Сообщений: 26
|
|
мог бы кто нибудь подсказать?
__________________
Расписание матчей [URL="http://sportlands.ru/hockey/world-championship/"]Чемпионата мира по хоккею 2012[/URL]!
|
|
25.04.2012, 23:27
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Что мешает добавить в расчёт необходимое вам время, переводите текущее и нужное время в секунды, находите разницу по времени и вычленяете из этой разницы годы, месяцы, дни, часы, минуты и секунды.
|
|
26.04.2012, 09:13
|
Интересующийся
|
|
Регистрация: 12.09.2010
Сообщений: 26
|
|
bes, мог бы подсказать код? понимаю общие принципы, но все же чайник в javascript.
__________________
Расписание матчей [URL="http://sportlands.ru/hockey/world-championship/"]Чемпионата мира по хоккею 2012[/URL]!
|
|
26.04.2012, 13:20
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Насколько я понял, ваш пример рабочий, не хватает только обратного отсчёта от необходимого времени в момент наступления нужного дня (проверите это при помощи 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" : "").
|
|
26.04.2012, 14:36
|
Интересующийся
|
|
Регистрация: 03.02.2012
Сообщений: 25
|
|
Или можно задать дату конкретным числом с минутами-секундами :
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) получите оставшиеся минуты, часы и т.п. А дальше функцию обратного счета нужно сделать...
|
|
27.04.2012, 11:56
|
Интересующийся
|
|
Регистрация: 12.09.2010
Сообщений: 26
|
|
Сообщение от Denizz
|
Или можно задать дату конкретным числом с минутами-секундами :
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) получите оставшиеся минуты, часы и т.п. А дальше функцию обратного счета нужно сделать...
|
Спасибо!
__________________
Расписание матчей [URL="http://sportlands.ru/hockey/world-championship/"]Чемпионата мира по хоккею 2012[/URL]!
|
|
27.04.2012, 22:56
|
Интересующийся
|
|
Регистрация: 03.02.2012
Сообщений: 25
|
|
Вот мой вариант функции :
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();
Надеюсь у вас получилось лучше ))
|
|
05.08.2013, 11:59
|
Новичок на форуме
|
|
Регистрация: 07.09.2012
Сообщений: 6
|
|
И как в итоге должен выглядеть код?
|
|
30.12.2013, 00:02
|
Новичок на форуме
|
|
Регистрация: 29.12.2013
Сообщений: 1
|
|
Изменить вот здесь:
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);}
|
|
|
|