• User

    Script countdown

    Salve a tutti! Dopo molto tempo riscrivo... come al solito per chiedervi aiuto! 😞

    Allora, ho uno script mooolto carino che visualizza un countdown sulle pagine web che ho trovato in rete(un classico, insomma...) Attenzione, da qui in poi spero di spiegarmi bene... (ci provo, non linciatemi!)

    Vorrei che lo script funzionasse così, esempio:
    ho una tabella, una colonna mi indica la data e l'ora esatta dell'inizio di un dato evento, l'altra la fine dello stesso. Ora, vorrei che, quando il **timer della fine dell'evento **torna a zero, quello dell'inizio ricominci a contare di nuovo... (aiuto... adesso mi uccidono! lol)

    Esempio "visivo":

    1. tempo rimanente all'evento 0h,02m,00s - tempo alla fine 1h,00m,00s
    2. tempo rimanente all'evento "In Progress" - tempo alla fine 0h,00m,30s
    3. tempo rimanente all'evento "In Progress" - tempo alla fine 0h,00m,00s
      quando scatta "0" del tempo alla fine il tempo rimanente deve ricominciare a countare, quindi
    4. tempo rimanente all'evento 0h,02m,00s - tempo alla fine 1h,00m,00s

    Una sorta di routine, insomma...

    Ragazzi, davvero... ve ne sarei molto grato se mi deste una mano... non sono molto ferrato in PHP ed è una settimana che mi "scervello"!❌x:x

    Vi posto il codice dello script, come posso modificarlo?

     
    <?php
    // Define your target date here
    $targetYear = date("Y");
    $targetMonth = date("m");
    $targetDay = date("d")+1;
    $targetHour = 16;
    $targetMinute= 17;
    $targetSecond= 00;
    // End target date definition
    // Define date format
    $dateFormat = "Y-m-d H:i:s";
    $targetDate = mktime($targetHour,$targetMinute,$targetSecond,$targetMonth,$targetDay,$targetYear);
    $actualDate = time();
    $secondsDiff = $targetDate - $actualDate;
    $remainingDay = floor($secondsDiff/60/60/24);
    $remainingHour = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
    $remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))/60);
    $remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))-($remainingMinutes*60));
    $targetDateDisplay = date($dateFormat,$targetDate);
    $actualDateDisplay = date($dateFormat,$actualDate);
    ?>
     
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Max's Countdown System</title>
    <link href="style/style.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
    var days = <?php echo $remainingDay; ?> 
    var hours = <?php echo $remainingHour; ?> 
    var minutes = <?php echo $remainingMinutes; ?> 
    var seconds = <?php echo $remainingSeconds; ?> 
    function setCountDown ()
    {
    seconds--;
    if (seconds < 0){
    minutes--;
    seconds = 59
    }
    if (minutes < 0){
    hours--;
    minutes = 59
    }
    if (hours < 0){
    days--;
    hours = 23
    }
    document.getElementById("remain").innerHTML = days+" days, "+hours+" hours, "+minutes+" minutes, "+seconds+" seconds";
    setTimeout ( "setCountDown()", 1000 );
    }
     
    </script>
    </head>
    <body onload="setCountDown();">
    <div id="container">
    <div id="header"><div id="header_left"></div>
    <div id="header_main">Max's Countdown System</div><div id="header_right"></div></div>
    <div id="content">
    <table class="countTable">
    <tr><td>Target date:</td><td><?php echo $targetDateDisplay; ?></td></tr>
    <tr><th colspan="2" id="remain"><?php echo "$remainingDay days, $remainingHour hours, $remainingMinutes minutes, $remainingSeconds seconds";?></th></tr>
    <tr><td>Actual date:</td><td><?php echo $actualDateDisplay; ?></td></tr>
    </table>
    </div>
    </body>
    </html>
    
    

    Grazie a tutti di cuore anticipatamente!


  • User

    Nessuno sa aiutarmi, per favore? :arrabbiato:


  • User Attivo

    Non so se ho capito bene, comunque, prova a fare questo...

    Setti delle variabili di backup, che allo scadere del timer, si ristorano...

    
    if(hours == 0 && minutes == 0 && seconds == 0)
    {
         hours = hours_bk;
         minutes = minutes_bk;
         seconds = seconds_bk;
    }
    
    

    Spero di aver capito giusto!


  • User

    Grazie infinite, Digital Daigor!

    Ma, purtroppo, non è quello che intendo io...:bho:

    Provo a spiegarmi meglio:

    Vorrei fare una "tabella eventi".
    Quindi, colonna col nome evento, colonna con l'inizio, colonna con la fine.

    1)Nella colonna "inizio" vorrei che il countdown contasse fino allo "0" per poi scrivere "In Progress".

    2)Nella colonna "fine", allo scadere del cdown dell'inizio, il contatore deve iniziare a fare il proprio mestiere... contare fino a "0" (es: "mancano 2gg,2h,28m,30s alla fine"...)... nella colonna "inizio" deve esserci sempre scritto "In Progress"...

    3)Quando anche il cdown della colonna "fine" arriva a "0", il cdown della colonna inizio deve ricominciare il conto alla rovescia...

    ...da qui in poi si devono ripetere all'infinito i punti da 1 a 3...

    Lo so che è più facile a farsi che a dirsi... solo che... IO NON SO PROPRIO DOVE METTERMI LE MANI col PHP... 😮

    Ho qualche infarinatura, ma niente più!
    Sono giorni che cerco una soluzione sulla rete...NIENTE!

    Aiuto... ❌x:x


  • User Attivo

    Allora, vediamo se ho capito...

    Tu hai una lista di eventi, e vuoi che finito uno, inizi automaticamente il countdown del'altro?


  • User

    @Digital Daigor said:

    Allora, vediamo se ho capito...

    Tu hai una lista di eventi, e vuoi che finito uno, inizi automaticamente il countdown del'altro?

    Ci siamo quasi! 😄

    Lista eventi, un evento ha un suo INIZIO ed una sua FINE. Quando INIZIO arriva a "0", "FINE" inizia a contare (quanto manca alla fine) e per tutta la durata di "FINE", "INIZIO" dovrebbe scrivermi "In Progress". Quando pure "FINE" arriva a "0", "INIZIO" riattacca a contare... e così fino alla morte!

    Madonna Santa! Roba da :fumato:

    Comunque Daigor, grazie per il tuo interessamento!

    Mandami pure tutti gli "scapocci" che vuoi!


  • User Attivo

    Ho abbozzato una cosuccia...

    
    <table cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td colspan="2" id="nome_evento">
            
            </td>
        </tr>
        <tr>
            <td id="inizio_evento">Inizio evento:</td>
            <td id="inizio_evento_tempo"></td>
        </tr>
        <tr>
            <td id="fine_evento">Scadenza evento:</td>
            <td id="fine_evento_tempo"></td>
        </tr>
        <tr>
            <td>Debug:</td>
            <td id="debug"></td>
        </tr>
        <tr>
            <td>Array:</td>
            <td id="array"></td>
        </tr>
    </table>
    <script>
    
    var $tempo_ora = <?php echo time(); ?>;
    var $id_array = 0;
    
    var $tipo_conteggio = '';
    
    $eventi = new Array();
    <?php
    
    $eventi[0]['inizio'] = time()+5;
    $eventi[0]['durata'] = 5;
    $eventi[0]['titolo'] = 'Evento 1';
    $eventi[1]['inizio'] = time()+15;
    $eventi[1]['durata'] = 5;
    $eventi[1]['titolo'] = 'Evento 2';
    $eventi[2]['inizio'] = time()+25;
    $eventi[2]['durata'] = 5;
    $eventi[2]['titolo'] = 'Evento 3';
    
    
    foreach($eventi as $key => $val)
    {
        $array_eventi .= "\$eventi[".$key."] = new Array('".$eventi[$key]['inizio']."','".$eventi[$key]['durata']."','".addslashes(htmlspecialchars($eventi[$key]['titolo']))."');\r\n";
    }
    
    echo $array_eventi;
    ?>
    
    var $conta_tra = <?php echo $eventi[0]['inizio']; ?>;
    var $scade_tra = <?php echo $eventi[0]['durata']; ?>;
    
    function $(id)
    {
        return document.getElementById(id);
    }
    
    function countdown()
    {
        controlla();
        
        if($tipo_conteggio == 'scade')
        {
            $scade_tra--;
        }
        else
        {
            $conta_tra--;
        }
        $tempo_ora++;
        
        scrivi();
        if($id_array < $eventi.length)
        {
            setTimeout('countdown()',1000);
        }
    }
    
    function controlla()
    {
        $('array').innerHTML = $id_array;
        if($eventi[$id_array][0] <= $tempo_ora)
        {
            if($scade_tra <= 0)
            {
                $id_array = $id_array+1;
                
                if($id_array < $eventi.length)
                {
                    $scade_tra = $eventi[$id_array][1];
                    $conta_tra = $eventi[$id_array][0];
                    $('debug').innerHTML = "Incremento array";
                    controlla();
                }
            }
            else
            {
                $tipo_conteggio = 'scade';
                $('debug').innerHTML = "Scade";
            }
            
        }
        else
        {
            $tipo_conteggio = 'conta';
            $('debug').innerHTML = "Conta";
        }
    }
    
    function scrivi()
    {
        if($tipo_conteggio == 'conta')
        {
            $tempo_ora_orario_secondi = ($eventi[$id_array][0]-$tempo_ora);
            $('inizio_evento_tempo').innerHTML = $tempo_ora_orario_secondi;
            $('nome_evento').innerHTML = $eventi[$id_array][2];
            $('fine_evento_tempo').innerHTML = '---';
        }
        else if($tipo_conteggio == 'scade')
        {
            if($id_array < $eventi.length && $scade_tra >= 0)
            {
                $tempo_ora_orario_secondi = $scade_tra;
                $('inizio_evento_tempo').innerHTML = 'In Progress';
                $('fine_evento_tempo').innerHTML = $tempo_ora_orario_secondi;
            }
            else
            {
                $('nome_evento').innerHTML = 'Fine eventi';
                $('inizio_evento_tempo').innerHTML = '---';
                $('fine_evento_tempo').innerHTML = '---';
                $('array').innerHTML = 'X';
                $('debug').innerHTML = "Finito";
            }
        }
    }
    
    
    countdown();
    </script>
    
    

  • User

    Abbozzato? Una cosuccia?

    Cavolo! Mi hai risolto il problema! Grazie un Milione Daigor! :eheh:

    Ultima cosa... ti prego di assistermi prima che faccia un "bordello"...

    Se volessi mettere separatamente gli eventi in tabella?

    In questo modo:

                        Inizio              Fine
    

    Evento 1 xxxxxxx xxxxxx
    Evento 2 xxxxxxx xxxxxx
    Evento 3 xxxxxxx xxxxxx

    Con la stessa disposizione far ripetere gli eventi "all'infinito"

    Ultimo aiuto! Promesso!

    Il codice va bene così! Proprio così intendevo! SEI UN GRANDE! :yuppi:


  • User Attivo

    Nel cercare di sfornare qualcosa di decente mi sono trovato davanti a un quesito...

    L'orario di partenza del 2° giro di countdown...come li hai, sempre da DB??


  • User

    Si, sempre da DB!

    Daigor, grazie veramente per il tuo interessamento!