2013-09-05 3 views
0

В моей базе данных updateTime установлен как TIMESTAMP и CURRENT_TIMESTAMP. Но когда я показываю данные, время, которое было записано в базе данных, не является моим местным часовым поясом, а скорее через 3 часа. Как я могу вычитать эти 3 часа, преобразовывая эту инструкцию SQL? Могу ли я использовать CONVERT_TZ как-то встроенный с этим утверждением? Я не знаю, как это сделать.mySQL Timezones Conversion

SELECT updates.updateID, updates.windowStatus, updates.onDeck, updates.updateComments, TIME_FORMAT(`updateTime`,'%r') AS showtime FROM updates ORDER BY updates.updateID DESC LIMIT 1 

ответ

1

Временная зона Сервера может быть установлена ​​каждым клиентом (для каждого подключения), чтобы получить данные в другом TZ, чем UTC. Для того, чтобы сделать это, вы просто должны использовать:

SET time_zone = timezone; 

Значение timezone может быть задано как смещение UTC ('+10: 00', '-6: 00', ...) или как названный часовой пояс (например, «Европа/Хельсинки», «США/Восток» или «МЕТ»). Поэтому вы можете установить свой собственный TZ, чтобы получать ваши данные в «+3: 00», если я не ошибаюсь.

Примите во внимание, что это смещение делается с помощью сервера MySQL влияет только на NOW(), CURTIME() и значения, хранящиеся в и извлекаемые из TIMESTAMP колонок (это то, что вы ищете).

Вы могли бы использовать

SELECT @@global.time_zone, @@session.time_zone; 

, чтобы получить глобальные и специфичные для клиента часовых поясов.

Есть более релевантная информация (и это на самом деле итог того, что я написал) по адресу: Time-zone support (mysql.com).

В вашем случае, вы могли бы иметь что-то вроде этого:

<?php 
mysql_select_db($database_casualconnnect, $casualconnnect); 

$set_tz_query = "SET time_zone = '+1:00'"; 
mysql_query($set_tz_query, $casualconnnect) or die(mysql_error()); 

$query_Recordset2 = "SELECT updates.updateID, updates.windowStatus, 
    TIME_FORMAT(`updateTime`,'%r') AS showtime, updates.onDeck, updates.updateComments 
    FROM updates ORDER BY updates.updateID DESC LIMIT 1"; 

$Recordset2 = mysql_query($query_Recordset2, $casualconnnect) or die(mysql_error()); 
$row_Recordset2 = mysql_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysql_num_rows($Recordset2); 

?> 
+0

честно, я не понимаю, как сделать эту работу. Я не думаю, что могу установить часовой пояс для сервера. –

+0

Ну, просто сделайте запрос с 'SET time_zone = timezone;' и пока вы не создадите новое соединение или не сложите существующее, вы получите свои данные в своем часовом поясе. В противном случае вы могли бы одновременно выполнять оба запроса с помощью запятой между ними. – Sikian

+0

Нравится? SET time_zone = часовой пояс; SELECT updates.updateID, updates.windowStatus, updates.onDeck, updates.updateComments, TIME_FORMAT ('updateTime', '% r') AS showtime FROM updates ORDER BY updates.updateID DESC LIMIT 1 –