Visualizzazione risultati 1 fino 2 di 2

Discussione: Problemi con codice Javascript

  1. #1
    Guest

    Unhappy Problemi con codice Javascript

    Salve a tutti,

    ho tentato di modificare un codice Javascript fare il conto alla rovescia che mi serve, ma mi vengono un sacco di problemi.

    Allora.... sarebbe un conto alla rovescia per le Olimpiadi 2008, però voglio che sia personalizzabile in base a diverse date. Deve far uscire una cosa del tipo Mancano 1 anno, 9 mesi, 23 giorni, 1 ora, 13 minuti e 48 secondi alle Olimpiadi '08.

    O meglio ancora:
    1 anno
    9 mesi
    23 giorni
    1 ora
    13 minuti
    48 secondi

    Il codice l'ho modificato perché non si trova in giro nulla che conti gli anni (solo i giorni.... un roba del tipo: "mancano 9875 giorni al....")
    I problemi sono i seguenti:

    *I secondi dovrebbero aggiornarmi 1 volta al secondo

    *Dovrei poter mettere la scritta dove voglio io e non in alto a sinistra.


    Grazie infinite a chi mi dà una mano


    Ecco il codice:

    Codice:
    <html>
    <head>
    
    </head>
    <body onLoad="getTime()">
    
    <div id="menu" style="position:absolute; right:0px; top:200px; width:50px">
    <script type="text/javascript" language="JavaScript">
    <!--
    function getTime() {
    now = new Date();
    y2k = new Date("Dec 22 2012 00:00:00");
    years = (y2k - now) / 1000 / 60 / 60 / 24 / 365;
    yearsRound = Math.floor(years);
    days = (y2k - now) / 1000 / 60 / 60 / 24  - (365 * yearsRound +1);
    daysRound = Math.floor(days);
    hours = (y2k - now) / 1000 / 60 / 60 - (24 * (daysRound +1)) - (365 * 24 * 
    
    yearsRound +1);
    hoursRound = Math.floor(hours);
    minutes = (y2k - now) / 1000 /60 - (24 * 60 * (daysRound +1)) - (60 * 
    
    (hoursRound+1)) - (365 * 24 * 60 * (yearsRound));
    minutesRound = Math.floor(minutes);
    seconds = (y2k - now) / 1000 - (24 * 60 * 60 * (daysRound+1)) - (60 * 60 * 
    
    (hoursRound+1)) - (60 * (minutesRound)) - (365 * 24 * 60 * 60 * yearsRound);
    secondsRound = Math.round(seconds);
    ann = (yearsRound == 1) ? " anno, " : " anni, ";
    sec = (secondsRound == 1) ? " secondo" : " secondi";
    min = (minutesRound == 1) ? " minuto, " : " minuti, ";
    hr = (hoursRound == 1) ? " ora, " : " ore, ";
    dy = (daysRound == 1)  ? " giorno, " : " giorni, "
    
    var scritta= "" + yearsRound + ann + daysRound  + dy + hoursRound + hr + 
    
    minutesRound + min + secondsRound + sec + " ";
    
    document.write("Mancano "+scritta+" alle Olimpiadi di Pechino")
    newtime = window.setTimeout("getTime();", 1000);
    
    }
    //-->
    </script>
    
    </div>
    
    </body>
    </html>
    Ultima modifica di pallaboing : 15-08-2006 alle ore 17.42.11

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Lo butto giù da capo e forse un po' con i piedi, spero che ti basti:
    Codice:
    /** parametro refDate: la data e ora (come oggetto Date) in cui il count down arriva a zero */
    function countDown (refDate)
    {
       // la data attuale
       var now = new Date();
       
       // il risultato
       var result = new Array (0, // anni [0]
          0, // mesi [1]
          0, // giorni [2]
          0, // ore [3]
          0, // minuti [4]
          0 // secondi [5]
       );
    
       // numero di giorni nei vari mesi
       var daysInMonths = new Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    
       // calcola i secondi
       var s2 = now.getSeconds ();
       var s1 = refDate.getSeconds ();
       if (s1 >= s2) result[0] = s1 - s2;
       else { result[0] = 60 + s1 - s2; result[1] = -1; }
    
       // calcola i minuti
       var m2 = now.getMinutes ();
       var m1 = refDate.getMinutes ();
       if (m1 >= m2) result[1] += m1 - m2;
       else { result[1] += 60 + m1 - m2; result[2] = -1; }
    
       // calcola le ore
       var h2 = now.getHours ();
       var h1 = refDate.getHours ();
       if (h1 >= h2) result[2] += h1 - h2;
       else { result[2] += 24 + h1 - h2; result[3] = -1; }
    
       // calcola i giorni
       var d2 = now.getDate ();
       var d1 = refDate.getDate ();
       if (d1 >= d2) result[3] += d1 - d2;
       else 
       { 
          result[3] += daysInMonths[(12 + now.getMonth()) % 12] + (now.getMonth() == 1 && now.getFullYear () % 4 == 0 ? 1 : 0) + d1 - d2;
          result[4] = -1;
       }
    
       // calcola i mesi
       var mt2 = now.getMonth ();
       var mt1 = refDate.getMonth ();
       if (mt1 >= mt2) result[4] += mt1 - mt2;
       else { result[4] += 12 + mt1 - mt2; result[5] = -1 }
    
       // calcola gli anni
       var y2 = now.getFullYear ();
       var y1 = refDate.getFullYear ();
       result[5] += y1 - y2;
    
       return result;
    }
    Questa era la parte più difficile, non ti resta altro che realizzare una funzione che, prendendo i dati da result, li formatti all'interno di un paragrafo. Poi richiamerai questa funzione con il codice
    Codice HTML:
    <BODY onLoad="setInterval ('formatta()', 1000)">
    da inserire in cima a tutte le pagine in cui vuoi visualizzare il contatore.

    Stammi bene...

    EDIT: ho testato lo script e l'ho corretto, sembra funzionare. Prova a verificarlo qui: http://dementialsite.altervista.org/...down-lungo.htm
    Ultima modifica di dementialsite : 16-08-2006 alle ore 18.54.50
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •