タイムゾーン間の違いをわざわざ理解しないでください。それは必要ありません。
ユーザーがページにアクセスするたびに、Usersテーブルのレコードのフィールドをlast-updated-timeで更新します。次に、過去5分以内に最終更新時刻を持つすべてのユーザーに対してクエリを実行します。これ以上のものは「オフライン」と見なされます。
MySQLのNOW()関数を使用してサーバー時間を使用する場合は、タイムゾーン間の差の計算を回避します。
これは、現在オンラインになっているユーザーの数を追跡する標準的な方法です(つまり、過去数分以内にアクティブになっています)。
常に更新
ページ間をジャンプしていなくてもアクティブであることを知りたい場合は、60秒ごとにサーバーにpingを実行するためのJavaScriptを少し含めて、サーバーがまだ生きていることを知らせてください。私の最初の提案と同じように機能しますが、少なくとも5分に1回は必死にサイトを閲覧しなくても、レコードが更新されます。
var stillAlive = setInterval(function () {
/* XHR back to server
Example uses jQuery */
$.get("stillAlive.php");
}, 60000);