Timer on php and Javascript (decision)


  • QA Engineer

    There's a timer code, it works great, but there's always some kind of "Bo." It's "Bo" that works on the same page with only one timer instead of the right amount.

    Help me get this straight.

    The counter code itself

    <?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) &gt; $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)) &gt; $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)) &lt; $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)) &lt; $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 &gt; 7) { // Sunday
        $days_remainder--;
      }
      if ($odd_days &gt; 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 &gt; 23)    
    {   
       dd = hh / 24;    
       dd = parseInt(dd);   
       hh = hh - (dd * 24); 
    } else { dd = 0; }
    
    if (ss &lt; 10) { ss = "0"+ss; }   
    if (mm &lt; 10) { mm = "0"+mm; }   
    if (hh &lt; 10) { hh = "0"+hh; }   
    if (dd == 0) { return (hh+":"+mm+":"+ss); } 
    else {  
        if (dd &gt; 1) { return (dd+" дней "+hh+":"+mm+":"+ss); }
        else { return (dd+" день "+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 } ?>

        &lt;?php
            if(strtolower(trim($_GET['do'])) == 't' )
            {
        ?&gt;
        // change text
        document.getElementById('cd').innerHTML = "&lt;?=$_GET['data']?&gt;";
        &lt;?php } ?&gt;
    
    }   
    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(); ?>

    Page code used by the counter.

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>До ЧАСА Х осталось...</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
    <!--
    #cd {
    margin: auto;
    height: 50px;
    width: 450px;
    font-family: "Courier New", Courier, mono;
    font-size: 24pt;
    color: #FFF;
    text-align: center;
    font-weight: bold;
    background-image: url(back.jpg);
    vertical-align: middle;
    }
    -->
    </style>
    </head>

    <body>
    <h1 align="center"> До ЧАСА X осталось </h1>
    <SCRIPT language="JavaScript" SRC="countdown.php?timezone=Europe/Moscow&countto=2015-01-01 12:00:00&do=r&data=http://onfireparadise.com"></SCRIPT>
    <br>
    <SCRIPT language="JavaScript" SRC="countdown.php?timezone=Europe/Moscow&countto=2015-02-01 1:12:00&do=r&data=http://onfireparadise.com"></SCRIPT> - ВОТ ЭТА СТРОКА НЕ РАБОТАЕТ (ПОКАЗЫВАЕТ ТОЛЬКО КАРТИНКУ ФОНА)
    <!--Тайм-зона http://www.php.net/manual/en/timezones.php
    do=t&data= - текст, который будет написан вместо таймера по наступлению часа Х
    do=r&data= Когда наступит час X, отправим посетителя на какую-нибудь страницу, например : http://ruseller.com
    -->
    <p>&nbsp;</p>
    <a></a>
    </body>
    </html>



  • I solved the problem of Internet search. Turns out the normal timer was in search. A little redesigned and the code itself.

    http://videouchilka.ru/timer.html




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2