Probleme mit der Zeitzone mit PHP und MySQL

Meine Serverzeit ist in GMT und ich tue Folgendes, wenn jemand online geht.

<code>// Set a default timezone
$defaultTimeZone = 'America/Toronto';

// load the user, if they are online...
$onlineUser = new user();
if (isset($_SESSION['user_id']))
{
    if ($onlineUser->loadUser($_SESSION['user_id']))
    {
        $defaultTimeZone = $onlineUser->timeZone;
    }
}

// set time zones
date_default_timezone_set($defaultTimeZone);
$db->query("SET SESSION time_zone = '".$defaultTimeZone."'");
</code>

Mein Problem ist also, dass ... jedes Mal, wenn jemand etwas unternimmt, das Datum / die Uhrzeit in der Ortszeit des Benutzers speichert ... eine ganze Reihe von Problemen auftreten.

Alles, was ich möchte, ist, dass alles in GMT gespeichert wird, aber die Benutzer die Daten in ihrer lokalen Zeitzone sehen und mit ihnen interagieren.

BEARBEITEN:

So aktualisiere ich den Benutzerstatus:

<code>public function updateStatus()
{
    global $db, $common, $config;

    // update the user record
    $data = array(
        'date_last_active'  => new Zend_Db_Expr('NOW()')
    );

    $db->update('users', $data, 'user_id='.$this->userId);
}
</code>

Hier ist meine Funktion, um einen Datumsstempel in Sekunden umzuwandeln ...

<code>public function dateTimeToUnixTime($dateString)
{
    if (strlen($dateString) < 10)
    {
        return "";
    }

    $parseDateTime = split(" ", $dateString);
    $parseDate = split("-", $parseDateTime[0]);

    if (isset($parseDateTime[1]))
    {
        $parseTime = split(":", $parseDateTime[1]);
    }
    else
    {
        $parseTime = split(":", "00:00:00");
    }

    return mktime($parseTime[0], $parseTime[1], $parseTime[2], $parseDate[1], $parseDate[2], $parseDate[0]);
}
</code>

Und zum Schluss, wie ich die Daten vergleiche:

<code>    $date = $oUser->dateLastActive;

    $lastSeen = abs($common->dateTimeToUnixTime(date('Y-m-d H:i:s')) - $common->dateTimeToUnixTime($date));

    if ($lastSeen < 300 )
    {
        echo "<font size='1' color='green'><strong>Online</strong></font>";
    }

    if ($lastSeen >= 300)
    {
        echo "<font size='1' color='black'><strong>Offline</strong></font>";
    }
</code>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage