Non preoccuparti di capire le differenze tra i fusi orari. Non è necessario.
Ogni volta che l'utente accede a una pagina, aggiorna un campo nel suo record della tabella Utenti ultimo aggiornamento. Quindi esegui una query per tutti gli utenti che hanno l'ora dell'ultimo aggiornamento negli ultimi 5 minuti. Qualcosa in più, e sono considerati "offline".
Se utilizzi l'ora del server, tramite la funzione NOW() in MySQL, eviterai di calcolare le differenze tra i fusi orari.
Questo è il modo standard per tenere traccia di quanti utenti sono attualmente online (che significa, attivi negli ultimi due minuti).
Costantemente aggiornato
Se vuoi sapere che sono ancora attivi anche quando non stanno saltando da una pagina all'altra, includi un po' di javascript per eseguire il ping del tuo server ogni 60 secondi circa per farti sapere che sono ancora vivi. Funzionerà allo stesso modo del mio suggerimento originale, ma aggiornerà i tuoi record senza richiedere loro di navigare freneticamente nel tuo sito almeno una volta ogni cinque minuti.
var stillAlive = setInterval(function () {
/* XHR back to server
Example uses jQuery */
$.get("stillAlive.php");
}, 60000);