Всем снова здравствуйте.
Заработал таки таймер у меня.
Но, проблему с выполнением нескольких таймеров так и не решил.
Срабатывает только
последний из всех.
- В цикле PHP выдаются таблицы с событиями, которые произойдут в конкретные Дату и Время.
- Соответственно, напротив каждого события должен висеть таймер обратного отсчёта
Моя реализация:
- Кусок кода PHP(в цикле):
выбираю данные из базы и применяю к ним функцию countdown()
$unix_date = $row_auct_select->start_date;
$unix_time = $row_auct_select->start_time;
$day = date ('d', $unix_date);
$month = date ('n', $unix_date);
$year = date('Y', $unix_date);
$time = date ('H:i:s', $unix_time);
echo "
<td>
<span id='$Zapros_iz_bd_(id_продукта)'>
</span>
<script language='javascript'>
countdown(".$unix_date.",".$unix_time.",".$Zapros_iz_bd_(id_продукта)."</script>
</td>
";
- Собственно, функция на JS:
function countdown(a_date,a_time,a_id)
{
span_id = document.getElementById(a_id);
montharray = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
auct_date = new Date(parseInt(a_date) * 1000);
auct_time = new Date(parseInt(a_time) * 1000);
var auct_year = auct_date.getYear(); if (auct_year < 1000) auct_year += 1900
var auct_month = auct_date.getMonth()
var auct_day = auct_date.getDate()
var auct_hour = auct_time.getHours()
var auct_minute = auct_time.getMinutes()
var auct_second = auct_time.getSeconds()
var futurestring = montharray[auct_month]+" "+auct_day+", "+auct_year+" "+auct_hour+":"+auct_minute+":"+auct_second
function calculate()
{
res = Date.parse(futurestring) - new Date()
res_day = Math.floor(res/(60*60*1000*24)*1)
res_hour = Math.floor((res%(60*60*1000*24))/(60*60*1000)*1)
res_min = Math.floor(((res%(60*60*1000*24))%(60*60*1000))/(60*1000)*1)
res_sec = Math.floor((((res%(60*60*1000*24))%(60*60*1000))%(60*1000))/1000*1)
if (res > 0)
{
span_id.innerHTML = res_day+" д. "+"<br/>"+res_hour+":"+res_min+":"+res_sec
setTimeout( calculate ,1000);
}
else
{
span_id.innerHTML = "Всё проехали";
}
}
calculate();
}
- Идентификатор каждого SPAN уникальный, но всё равно работает только в последней таблице...........?
- И как реализовать так, чтобы надпись по истечении времени таймера не "передёргивалась", не попадала в цикл функции JS?
В данной реализации надпись висит секунду, а затем наследует предыдущий таймер...
Видел похожие примеры, но так и не смог добиться поставленной задачи