Kümmern Sie sich nicht darum, die Unterschiede zwischen Zeitzonen herauszufinden. Das ist nicht nötig.
Jedes Mal, wenn der Benutzer auf eine Seite zugreift, aktualisieren Sie ein Feld in seinem Datensatz der Benutzertabelle zum Zeitpunkt der letzten Aktualisierung. Führen Sie dann eine Abfrage für alle Benutzer durch, deren letzte Aktualisierungszeit innerhalb der letzten 5 Minuten liegt. Alles darüber hinaus gilt als "offline".
Wenn Sie Ihre Serverzeit über die NOW()-Funktion in MySQL verwenden, umgehen Sie die Berechnung von Unterschieden zwischen Zeitzonen.
Dies ist die Standardmethode, um zu verfolgen, wie viele Benutzer derzeit online sind (d. h. in den letzten paar Minuten aktiv waren).
Ständig aktualisiert
Wenn Sie wissen möchten, dass sie immer noch aktiv sind, auch wenn sie nicht von Seite zu Seite springen, fügen Sie ein bisschen Javascript hinzu, um Ihren Server alle 60 Sekunden oder so zu pingen, damit Sie wissen, dass sie noch am Leben sind. Es funktioniert genauso wie mein ursprünglicher Vorschlag, aber es aktualisiert Ihre Datensätze, ohne dass sie Ihre Website mindestens alle fünf Minuten hektisch durchsuchen müssen.
var stillAlive = setInterval(function () {
/* XHR back to server
Example uses jQuery */
$.get("stillAlive.php");
}, 60000);