Два скрипта таймера вместе не работают

Dim565
На сайте с 19.08.2010
Offline
57
3831

Здравствуйте. Появилась необходимость сделать на одной странице несколько таймеров до заданного события (в будущем планируется около 5-10 таймеров).

Важно, чтобы время бралось не с ПК, а с сервера.

Нашел один скриптик. Все работает отлично, если скрипт один (пример)

т.е пишу так:

<SCRIPT language="JavaScript" SRC="countdown.php?timezone=Asia/Kuala_Lumpur&countto=2020-01-01 00:00:00&do=t&data=WAWASAN 2020"></SCRIPT>

Но если пишу так:

<SCRIPT language="JavaScript" SRC="countdown.php?timezone=Asia/Kuala_Lumpur&countto=2020-01-01 00:00:00&do=t&data=WAWASAN 2020"></SCRIPT>
<SCRIPT language="JavaScript" SRC="countdown.php?timezone=Asia/Kuala_Lumpur&countto=2010-01-01 00:00:00&do=t&data=WAWASAN 2020"></SCRIPT>

- два скрипта не работают вместе! Вот пример

Скажите пожалуйста - возможно ли заставить работать несколько таймеров на одной странице? А может есть еще что-то готовое, но уже точно работающее?

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Dim565, можно, каждый вызов скрипта создает динамически div с id="cd", то есть, 2 вызова создают 2 дива с одинаковым id и скрипт пишет в первый див, что и правильно по логике работы с id.

Для того, чтобы этого не было нужно создавать дивы с разными id, и передавать данные туда - например, взять за основу md5 от timezone. В общем там работы на пару минут скорее всего, если код не криво написан. :)

B
На сайте с 14.07.2010
Offline
36
#2

У Вас они и не выполнятся.

Потому как 2 раза вы объявляете одни и и те же функции, которые обновляют один и тот же див.

Выхода 3:

1. Переписать js так, чтобы можно было параметром указать айди дива в котором нужно сделать счётчик.

2. Переписать countdown.php так, чтобы брал ещё 3-й параметр айдишник дива и сразу подставлял его в скрипт

3. Написать отдельные countdown.php для разных счётчиков.

Правильный - это 1. Нормальный - 2. Корявый, быстрый - 3

Dreammaker опередил, пока писал ответ :)

Dim565
На сайте с 19.08.2010
Offline
57
#3

Спасибо, буду пробовать ковырять код с дивом

Dim565 добавил 03-03-2011 в 15:12

Ничего не вышло, пробовал часа 3 - видимо, не все так просто

Dim565
На сайте с 19.08.2010
Offline
57
#4

Подскажите пожалуйста: сделал по самому простому способу, который предлагал Bermuda:

  • Создал 2 PHP-файла:
  • <?php
    
    // we will be sending Javascript codes, remember...
    header('Content-Type: text/javascript');

    // select the timezone for your countdown
    $timezone = trim($_GET['timezone']);
    putenv("TZ=$timezone");

    // Counting down to New Year's on 2020
    $countdown_to = trim($_GET['countto']); // 24-Hour Format: YYYY-MM-DD HH:MM:SS"

    // Getting the current time
    $count_from = date("Y-m-d H:i:s"); // current time -- NO NEED TO CHANGE

    // Date difference function. Will be using below
    function datediff($interval, $datefrom, $dateto, $using_timestamps = false) {
    /*
    $interval can be:
    yyyy - Number of full years
    q - Number of full quarters
    m - Number of full months
    y - Difference between day numbers
    (eg 1st Jan 2004 is "1", the first day. 2nd Feb 2003 is "33". The datediff is "-32".)
    d - Number of full days
    w - Number of full weekdays
    ww - Number of full weeks
    h - Number of full hours
    n - Number of full minutes
    s - Number of full seconds (default)
    */

    if (!$using_timestamps) {
    $datefrom = strtotime($datefrom, 0);
    $dateto = strtotime($dateto, 0);
    }
    $difference = $dateto - $datefrom; // Difference in seconds

    switch($interval) {

    case 'yyyy': // Number of full years

    $years_difference = floor($difference / 31536000);
    if (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom), date("j", $datefrom), date("Y", $datefrom)+$years_difference) > $dateto) {
    $years_difference--;
    }
    if (mktime(date("H", $dateto), date("i", $dateto), date("s", $dateto), date("n", $dateto), date("j", $dateto), date("Y", $dateto)-($years_difference+1)) > $datefrom) {
    $years_difference++;
    }
    $datediff = $years_difference;
    break;

    case "q": // Number of full quarters

    $quarters_difference = floor($difference / 8035200);
    while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($quarters_difference*3), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
    $months_difference++;
    }
    $quarters_difference--;
    $datediff = $quarters_difference;
    break;

    case "m": // Number of full months

    $months_difference = floor($difference / 2678400);
    while (mktime(date("H", $datefrom), date("i", $datefrom), date("s", $datefrom), date("n", $datefrom)+($months_difference), date("j", $dateto), date("Y", $datefrom)) < $dateto) {
    $months_difference++;
    }
    $months_difference--;
    $datediff = $months_difference;
    break;

    case 'y': // Difference between day numbers

    $datediff = date("z", $dateto) - date("z", $datefrom);
    break;

    case "d": // Number of full days

    $datediff = floor($difference / 86400);
    break;

    case "w": // Number of full weekdays

    $days_difference = floor($difference / 86400);
    $weeks_difference = floor($days_difference / 7); // Complete weeks
    $first_day = date("w", $datefrom);
    $days_remainder = floor($days_difference % 7);
    $odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
    if ($odd_days > 7) { // Sunday
    $days_remainder--;
    }
    if ($odd_days > 6) { // Saturday
    $days_remainder--;
    }
    $datediff = ($weeks_difference * 5) + $days_remainder;
    break;

    case "ww": // Number of full weeks

    $datediff = floor($difference / 604800);
    break;

    case "h": // Number of full hours

    $datediff = floor($difference / 3600);
    break;

    case "n": // Number of full minutes

    $datediff = floor($difference / 60);
    break;

    default: // Number of full seconds (default)

    $datediff = $difference;
    break;
    }

    return $datediff;
    }

    // getting Date difference in SECONDS
    $diff = datediff("s", $count_from, $countdown_to);
    ?>

    // Here’s where the Javascript starts
    countdown = <?=$diff?>;

    // Converting date difference from seconds to actual time
    function convert_to_time(secs)
    {
    secs = parseInt(secs);
    hh = secs / 3600;
    hh = parseInt(hh);
    mmt = secs - (hh * 3600);
    mm = mmt / 60;
    mm = parseInt(mm);
    ss = mmt - (mm * 60);

    if (hh > 23)
    {
    dd = hh / 24;
    dd = parseInt(dd);
    hh = hh - (dd * 24);
    } else { dd = 0; }

    if (ss < 10) { ss = "0"+ss; }
    if (mm < 10) { mm = "0"+mm; }
    if (hh < 10) { hh = "0"+hh; }
    if (dd == 0) { return (hh+":"+mm+":"+ss); }
    else {
    if (dd > 1) { return (dd+" days "+hh+":"+mm+":"+ss); }
    else { return (dd+" day "+hh+":"+mm+":"+ss); }
    }
    }

    // Our function that will do the actual countdown
    function do_cd()
    {
    if (countdown < 0)
    {
    <?php
    if(strtolower(trim($_GET['do'])) == 'r' )
    {
    ?>
    // redirect web page
    document.location.href = "<?=$_GET['data']?>";
    <?php } ?>

    <?php
    if(strtolower(trim($_GET['do'])) == 't' )
    {
    ?>
    // change text
    document.getElementById('cd').innerHTML = "<?=$_GET['data']?>";
    <?php } ?>

    }
    else
    {
    document.getElementById('cd').innerHTML = convert_to_time(countdown);
    setTimeout('do_cd()', 1000);
    }
    countdown = countdown - 1;
    }

    document.write("<div id='cd'></div>\n");

    do_cd();

    <? exit(); ?>
    А во втором php-файле (countdown2.php)
  • На странице пишу так:
    <SCRIPT language="JavaScript" SRC="countdown.php?timezone=Asia/Kuala_Lumpur&countto=2020-01-01 00:00:00&do=t&data=WAWASAN 2020"></SCRIPT><BR/>
    
  • <SCRIPT language="JavaScript" SRC="countdown2.php?timezone=Asia/Kuala_Lumpur&countto=2011-05-05 00:00:00&do=t&data=WAWASAN 2020"></SCRIPT>

Также пробовал менять во втором скрипте:

($_GET['countto']); на ($_GET['countto2']);

($_GET['timezone']); на ($_GET['timezone2']);
- не помогло

Скажите, кто знает - в чем проблема? Ведь разные контейнеры=дивы теперь создаются!?

Dim565
На сайте с 19.08.2010
Offline
57
#5

Все заработало, ошибка была в том, что в php-скрипте не везде менял cd. Также в CSS добавил cd1,cd2 и т.п

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий