Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Inconguenza di Date() durante il passaggio all'ora legale

    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:
    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> 
    Cosa ne pensate di tutto questo?

    Ciao e grazie mille
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

  2. #2
    Perché nessuno mi risponde?
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2000
    Messaggi
    938
    Ciao,


    prova impostando la data l'ora ecc... con nome_variabile.toGMTString()


    Massimo

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2000
    Messaggi
    938
    Ciao,

    prova cosi

    Codice PHP:
    <body onload="ora_di_greenwich();">
    <
    script type="text/javascript">
    function 
    ora_di_greenwich() {
    localDate = new Date();
    UTCoffset localDate.getTimezoneOffset();
    data localDate.toGMTString()+ "   OffSet    " UTCoffset
    document
    .riferimento.greenwich.value=data;
    setTimeout("ora_di_greenwich()",1000);
    }
    </script> 

    Massimo

  5. #5
    Grazie mille Massimo, sei stato veramente utile. Con toGMTString() il problema scompare. Ho dato un'occhiata più approfondita al comando ed ho scoperto che la "convenzione UTC" é preferibile anche se identica. Inoltre UTCoffset é in minuti quindi la stringa é questa ma poco importa:
    data = localDate.toUTCString()+(UTCoffset * 60 * 1000);
    Grazie mille per l'aiuto, sei stato a dir poco unico!

    A questo punto nascono però degli altri problemi che nuovamente non riesco ad affrontare quindi vorrei provare a chiederti un ultimissimo aiuto.

    Perché con la variabile data non funzionano altre simpatiche funzioni come getMinutes(), getSeconds(), getTime() e moltre altre simili? Come posso lavorare con toUTCString()? Il mio obiettivo era quello di scrivere la data nella forma:
    ora:minuti:secondi, giorno del mese, mese, anno
    Ho provato a scrivere:
    codice:
    UTCDate = new Date(data);
    per ottenere una nuova data formattata decondo la sequenza standard di Date() ma non c'é verso di venirne a capo.

    Se scrivo:
    codice:
     a = Date.parse(localDate.toGMTString());
     b = (UTCoffset * 60 * 1000);
     prova2 = new Date(a+b);
    inciampo nuovamente nello stesso problema.

    Ancora grazie per il tuo tempo.
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

  6. #6
    Ho risolto tutto, scusate se a volte sono prolisso...

    Grazie
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

  7. #7
    Mi sono accorto di avere ancora un problemino derivato dalla funzione Date().

    Quando scrivo:
    var porcaPUT = new Date(2010,2,28,2,10,10);
    Perché javascript salva in porcaPUT la data con un ora in meno?
    Perché solo in quel giorno in cui si cambia l'ora?
    Come é possibile ovviare a questo problema?
    Come diavolo si usano queste funzioni per le ore?!?!
    bah... javascript mi sembra sempre più incomprensibile... secondo me funziona anche male...

    Ciao
    Chi non crede in una cultura libera forse non
    ha mai provato un forum ma chi ha provato
    un forum e non crede in una cultura libera
    allora non é mai stato utile alla
    cultura altrui.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.