Ciao ho un problema con Javascript data e ora!

4 views
Skip to first unread message

Luigi Beatrice

unread,
Apr 2, 2007, 7:10:24 AM4/2/07
to jugto...@googlegroups.com
Salve ragazzi e ragazze, ho inserito nel mio sito internet un'applicazione Javascript data e ora;all'inizio tutto andava bene, ma dopo qualche giorno l'orario mi va per conto suo.L'applicazione l'ho trovata in rete, l'ho modificata solamente per farne una versione in lingua inglese, senza modificare nulla sulla sua  funzionalità.Ad esempio le 10:00 Am me le visualizza    come  -2:00Am, mentre l'orario Pm giustamente mi da le 1:00 Pm che sarebbero le ore 13:00.
Arrivando al dunque io vorrei sapere dove ho sbagliato (se ho sbagliato)o dov' è l'errore!?
Aiutatemi!
Ecco l'applicazione:
 
<html>
<body>

<script language="javascript">
gg = new
Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
ms = new
Array('January','February','March','April','May','June','July','August','September','October','November','December');
function visua()
{
 var ora = new Date();
 var aa = ora.getDate();
 var mm = ora.getMonth();
 var yy = ora.getFullYear();
 var oo = ora.getHours();
 var mn = ora.getMinutes();
 var sec = ora.getSeconds ();
 var dd = ora.getDay();
 var aa2  = ((aa < 10) ? "0" : "");
 var oo2  = ((oo < 10) ? "0" : "");
 var mn2  = ((mn < 10) ? ":0" : ":");
 var sec2  = ((sec < 10) ? ":0" : ":");
 var Data = aa2 + aa +" "+ ms[mm]  + " " + yy;
 var hh = oo2 + oo - 12 + mn2 + mn + sec2 + sec;
 var amopm="Am"
 if (oo>12){
 amopm="Pm"
 }
 if(document.all){
 document.all.primo.innerHTML = " "+ gg[dd] + "/" + Data + "/" + hh + " " +amopm;
 }
 else if(document.getElementById ){
 document.getElementById('primo').innerHTML  = gg[dd] + " - " + Data + " - " + hh + " " +amopm;
 }
 else if(document.layers){
 document.layers['primo'].document.write('<p id="primo" style="position:absolute; font-family:Verdana; font-size:10pt; font-weight:bold; color:#800000">Con Netscape: '+gg[dd] + " - " + Data + " - " + hh+ " " +amopm+'</p>');
 document.layers['primo'].document.close()
 }
 window.setTimeout("visua()",1000);
}
</script>


</head>
<body bgcolor=#ffffff>
<p id="primo" style="position:absolute; font-family:Verdana; font-size:10pt; font-weight:bold; color:#000000"></p>
<script language="javascript">
window.setTimeout("visua()",1000);
</script>
</body>
</html>

Fatemi sapere se si può aggiustare!Ciao!

Luigi

Alessandro Fruchi

unread,
Apr 2, 2007, 7:23:38 AM4/2/07
to jugToscana
Il problema risiede nella riga in cui definisci l'ora:


var hh = oo2 + oo - 12 + mn2 + mn + sec2 + sec;

Come vedi, quello che succede e' che viene sottratto sempre 12, senza tener conto se siamo nella prima o nella seconda parte della giornata.

Se ad esempio sono le 10, oo2 riporta 10, oo e' ininfluente (o e' vuoto o e' zero) e poi c'e' il -12
Risultato 10-12 = -2
Per le ore pomeridiane non c'e' problema perche' sono comunque tutte maggiori di 12, quindi vengono sempre numeri positivi.

La sottrazione va fatta solamente se intendi avvalerti della modalita' AM/PM e solo nel caso in cui ci si trovi nella seconda parte della giornata (ovvero, passate le 12).

Un paio di if e vedrai che risolvi il problema!

Ale

--
Alessandro Fruchi

G@W - http://www.guruatwork.com
JugToscana - http://www.jugtoscana.org

Alessandro Fruchi

unread,
Apr 2, 2007, 8:15:06 AM4/2/07
to jugToscana
On 4/2/07, Luigi Beatrice <luigi.b...@gmail.com> wrote:
Se volessi inserire l'ora senza am/pm, quindi nel formato 24 ore come dovrei fare?Potresti inviarmi  tutta la dicitura dell'applicazione nel formato 24 ore?Per favore!!


Riscrivo qui soltanto il codce javascript, poiche' il resto della pagina rimane invariato...
Ho snellito un po' il codice andando ad effettuare le scelte dell'operatore ternario direttamente al momento di impostare i valori nelle variabili dell'orologio ed ho tolto completamente il controllo sulle 12/24 ore (c'era un if di troppo a questo punto).

Nella parte di codice HTML puoi togliere la chiamata window.setTimeout("visua()",1000); sostituendola semplicemente con visua(); dal momento che il timeout di ripetizione dello script e' gia' impostato all'interno della funzione stessa, quindi basta richiamarla soltanto la prima volta per fare in modo che venga impostato l'intervallo corretto ad ogni esecuzione della funzione.

<script language="javascript">
gg = new
Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
ms = new
Array('January','February','March','April','May','June','July','August','September','October','November','December');
function visua()
{
 var ora = new Date();
 var aa = (ora.getDate() < 10) ? "0"+ora.getDate() : ora.getDate();
 var mm = ora.getMonth ();
 var yy = ora.getFullYear();
 var oo = (ora.getHours() < 10) ? "0"+ora.getHours() : ora.getHours();
 var mn = (ora.getMinutes() < 10) ? "0"+ora.getMinutes() : ora.getMinutes();
 var sec = (ora.getSeconds () < 10) ? "0"+ora.getSeconds () : ora.getSeconds ();
 var dd = ora.getDay();
 
 var Data = aa +" "+ ms[mm]  + " " + yy;
 var hh = ""+ oo + ":" + mn + ":" + sec;
 
 if(document.all ){
 document.all.primo.innerHTML = " "+ gg[dd] + " " + Data + "/" + hh;
 }
 else if(document.getElementById ){
 document.getElementById('primo').innerHTML  = gg[dd] + " - " + Data + " - " + hh;

 }
 else if(document.layers){
 document.layers['primo'].document.write('<p id="primo" style="position:absolute; font-family:Verdana; font-size:10pt; font-weight:bold; color:#800000">Con Netscape: '+gg[dd] + " - " + Data + " - " + hh+ " " +amopm+'</p>');
 document.layers['primo'].document.close()
 }
 window.setTimeout("visua()",1000);
}
</script>



Reply all
Reply to author
Forward
0 new messages