Всем здравствуйте.
Обращаюсь к знатокам JS.
Бьюсь над проблемой уже двое суток, и с каждой секундой всё больше ненавижу себя за незнание яваскрипт.
Стоит задача: - В цикле PHP выдать таблицы с событиями, которые произойдут в конкретные Дату и Время.
- Соответственно, напротив каждого события должен висеть таймер обратного отсчёта
Моя реализация:
- Кусок кода PHP(в цикле):
выбираю данные из базы и применяю к ним функцию countdown()
$unix_date = strtotime($date_from_db);
$unix_time = strtotime($time_from_db);
$day = date ('d', $unix_date);
$month = date ('n', $unix_date);
$year = date('Y', $unix_date);
$hour = date ('H', $unix_time);
$minute = date ('i', $unix_time);
$second = date ('s', $unix_time);
echo "
<td>
<span id='auct_timer'>
</span>
<script language='javascript'>
countdown(".$year.",".$month.",".$day.",".$hour.",".$minute.",".$second.")
</script>
</td>
";
- Собственно, функция на JS:
function countdown(yr,m,d,h,mn,s)
{
var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
theyear = yr;
themonth = m;
theday = d;
thehour = h;
theminute = mn;
thesecond = s;
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+", "+h+", "+mn+", "+s
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)
var tdays=" д. "
var thours=" ч. "
var tmin=" м. "
var tsec=" c. "
if (dd == 0||dd < 0)
{
document.getElementByID('auct_timer').innerHTML = "Поехали!"
return
}
else
{
document.getElementById("auct_timer").innerHTML = futurestring//dday+tdays+dhour+thours+dmin+tmin+dsec+tsec
setTimeout("countdown(theyear,themonth,theday,thehour,theminute,thesecond)",1000)
}
}
- Проблема состоит в том, что переданные данные из PHP, попадая в функцию JS изменяются непонятно (мне) как. Т.е., например, если передаю
дату 20 апреля 2014 12:00:00 она сразу же превращается
в May 18, 2014, 14, 12, 0. Чушь какая то?! (Вывод специально проверял; сам таймер закомментировал пока)
Как тут вырулить, подскажите, кто знает. Или может пример похожий (именно похожий) где встречали?
- Вторая проблема, при выводе в цикле PHP, данные ,т. е. таймер (после обработки функцией) почему то выводится только в первой таблице...? В последующих нет. Как быть тут?
Очень надеюсь на дельный совет...
Свою ситуацию брал из
Здесь.