Ciao a tutti,
C'é un errore in Date(), su Windows oppure nel mio cervello?
Prima di leggere il quesito vorrei ricordare che a Roma l'ora legale scatta il 28/03/2010 alle ore 2 (passando dalle 2 alle 3) e termina il 31/10/2010 alle ore 3 (passando dalle 3 alle 2).
Stavo approfondendo su di una guida la funzione:
var miaData = new Date()
e ho creato per l'appunto un piccolo script che mi visualizzasse sul computer l'ora solare di Greenwich.
La cosa strana é che il listato funziona sempre tranne per sole 3 ore all'anno, rispettivamente 2 ore di errore dopo il passaggio all'ora legale sul pc locale e 1 ora dopo il ritorno all'ora solare sul computer locale.
Se non avete capito il problema non disperate perché vi faccio un esempio:
Supponete di essere a Roma e di essere il 28 marzo 2010 poco dopo la mezzanotte. Con windows vedreste la seguente progressione:
1:00 -> 1:59 (Le ore 2:00 non le vedrete mai perché windows passa in automatico alle ore 3:00 ovvero all'ora legale)
3:00
4:00
5:00
Supponete ora di essere ancora a Roma e di vedere un orologio a Greenwich non curante delle impostazioni del fusoorario (vedere i numeri tra parentesi). Per semplificare la notazione aggiungiamo una "s" per "ora solare" ed una "L" per "ora legale".
28 marzo 2010
L1:00 - (s0:00)
L3:00 - (s1:00)
L4:00 - (s2:00)
L5:00 - (s3:00)
31 ottobre 2010
L2:59 - (s0:59)
L2:00 - (s1:00)
L3:00 - (s2:00)
L4:00 - (s3:00)
Fin qui nessun problema. Proviamo ora a creare un piccolo file html con js integrato che visualizzi la data di Greenwich in funzione della data che noi leggiamo sul nostro computer. Per settare il software é sufficiente giocare con l'orologio del OS e vedere quello che esce fuori. Vi accorgerete di quanto segue:
Nessun problema per 363 giorni all'anno e un pasticcio tremendo il 28/03/2010 ed il 31/10/2010.
28/03/2010
L1:00 - (s0:00) OK!!!![]()
L3:00 - (s0:00) IMPOSSIBILE!!!![]()
L4:00 - (s1:00) IMPOSSIBILE!!!![]()
L5:00 - (s3:00) OK!!!![]()
31/10/2010
L2:59 - (s0:59) OK!!!![]()
L2:00 - (s2:00) IMPOSSIBILE!!!![]()
L3:00 - (s2:00) OK!!!![]()
L4:00 - (s3:00) OK!!!![]()
Il listato che a me sembra scritto a regola d'arte é il seguente:
Cosa ne pensate di tutto questo?Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<body onload="ora_di_greenwich();">
<script type="text/javascript">
function ora_di_greenwich() {
localDate = new Date();
localTime = localDate.getTime();
UTCoffset = localDate.getTimezoneOffset();
UTCTime = localTime + (UTCoffset * 60 * 1000);
UTCDate = new Date(UTCTime);
document.riferimento.greenwich.value=UTCDate;
setTimeout("ora_di_greenwich()",1000);
}
</script>
<form name="riferimento">
<input type="text" value="00:00:00" name="greenwich" style="width:500px"/>
</form>
</body>
</html>
Ciao e grazie mille