2010-07-29 14 views

risposta

7

Non esiste un modo (portatile) per tenere traccia di una variabile in JavaScript. Inoltre, le informazioni sulla data non si trovano nel DOM, quindi non si ha la possibilità che un evento DOM venga attivato.

Il meglio che puoi fare è usare setInterval per controllare periodicamente (ogni secondo?). Example:

function timeChanged(delta) { 
    // Whatever 
} 

setInterval(function timeChecker() { 
    var oldTime = timeChecker.oldTime || new Date(), 
     newTime = new Date(), 
     timeDiff = newTime - oldTime; 

    timeChecker.oldTime = newTime; 

    if (Math.abs(timeDiff) >= 5000) { // Five second leniency 
    timeChanged(timeDiff); 
    } 
}, 500); 
+0

Questo è esattamente. Grazie. Ma il tempo di ritorno, non succede nulla. – AHOYAHOY

+0

@yomash, potrebbe trattarsi di un problema con Windows o Chrome; Ho notato che è stato necessario un po 'di tempo per propagare le modifiche a ritroso nel tempo. Succede, tuttavia, ma solo pochi secondi dopo il previsto. – strager

+0

sì, problema cromato (su ubuntu). Grazie. – AHOYAHOY

0

Vuoi dire se stanno cambiando il proprio tempo di sistema in qualcosa che è sbagliato? È possibile chiedere all'utente il proprio fuso orario e ottenere l'ora corretta dal server, quindi confrontarlo con l'ora di sistema dell'utente.

+0

La mia pagina ha generato eventi nel momento esatto. Ad esempio, quando l'utente modifica l'orario di sistema, salta diversi eventi. – AHOYAHOY

0

Non credo che ci sia una soluzione a quello che stai chiedendo, ma è possibile ottenere gli utenti fuso orario compensate.

new Date().getTimezoneOffset() * -1 

Questo restituisce l'offset in minuti da GMT. Bare a mente anche se questo non tiene in considerazione la DST.

1

Check in una funzione di intervallo che il tempo non ha cambiato troppo:

function getTime() { 
    var d = new Date(); 
    return d.getTime(); 
} 

function checkTime() { 
    if (Math.abs(getTime() - oldtime) > 2000) { // Changed by more than 2 seconds? 
    alert("You changed the time!"); 
    } 
    oldtime = getTime(); 
} 

var oldtime = getTime(); 
setInterval(checkTime, 1000); // Check every second that the time is not off 

testato su Windows con Opera & FF e funziona perfettamente.

+0

Il mio male, non ho letto il codice abbastanza attentamente. – mattbasta

1
var last_time = new Date().getTime(); 
setInterval(function() { 
    var time = new Date().getTime(); 
    var offset = time - last_time; 
    if(offset < 0 || offset > 1500) { 
     // Time has been changed 
    } 
    last_time = time; 
}, 1000); 

In teoria, questo dovrebbe funzionare. Controllerà ogni secondo per assicurarsi che l'ora non sia stata cambiata. Nota che utilizzo 1100 millisecondi poiché la maggior parte degli interpreti JS non attiva gli eventi esattamente all'ora specificata.

Spero che questo aiuti!

0

È possibile controllare ogni 30 secondi, ecc. Se il nuovo Tempo è disattivato di oltre 30 secondi +/- una certa soglia, è possibile eseguire un confronto più esauriente per determinare quanto è stato modificato.

Problemi correlati