Проблемы с часовым поясом с PHP и MySQL
Время моего сервера в GMT, и я делаю следующее, когда кто-то выходит в сеть.
<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>
Итак, моя проблема заключается в следующем ... всякий раз, когда кто-то что-то делает, он сохраняет дату / время по местному времени пользователя ... вызывая у меня целый ряд проблем.
Все, что я хочу, это чтобы все было сохранено в GMT, но пользователи могли видеть & amp; взаимодействовать с данными в местном часовом поясе.
EDIT:
Вот как я обновляю статус пользователей:
<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>
Вот моя функция, чтобы превратить штамп даты в секунды ...
<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>
И наконец, как я сравниваю даты:
<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>