时区问题mysql

时间:2010-11-22 16:13:46

标签: php mysql

我的服务器在美国,我在英国。

我使用默认的CURRENT_TIMESTAMP将时间戳值存储在mysql服务器上。因此,当条目添加到我的表格时,它们会加盖当前时间。这是服务器时间(US),然后由mysql转换为UTC。

当我检索值时,我希望它们显示在当前时区(英国)中。所以在我的PHP中我使用以下函数来设置当前时区:

mysql_query("SET time_zone = timezone;");

这似乎有效,因为当我要求mysql回显服务器和会话时区时,我分别得到SYSTEM和-08:00。

但是,当我稍后在同一个PHP脚本中打印我的时间戳值时,它们会在美国时间输出。

在PHP中获得结果:

$result = mysql_query("SELECT ID,DateTime,Name,Comment,Location,Rating FROM table1 WHERE Latitude<$latup AND Latitude>$latdown AND Longitude<$lngup AND Longitude>$lngdown ORDER BY DateTime DESC")

while(($row = mysql_fetch_array( $ratingresult )) && ($i++ < 1)) {
    echo "<tr><td>"; 
    echo $row['DateTime'];
    echo "</td><td>"; 
    echo $row['Name'];
    echo "</td><td>";
    echo $row['Comment'];
    echo "</td><td>";
    echo $row['Location'];
    echo "</td><td>";
    echo $row['Rating'];
    echo "</td><td>";
    rate($row, $lat, $lng);
    echo "</td></tr>"; 
} 

任何帮助都会非常感激!

3 个答案:

答案 0 :(得分:0)

在MySQL中使用多个时区可能会非常棘手。

你必须非常小心地在每个会话的基础上更改时区。除了更改从TIMESTAMP字段检索的显示结果(实际上是自01-01-1970 00:00:00 GMT以来的整数秒数),它还会更改插入{{1}的数据字段(实际上是硬编码字符串),和/或评估DATETIME的方式。

如果还不晚,而你的应用程序允许,我建议将服务器/全球时区设置为英国(并在my.cnf中进行相应的更改):

e.g。来自http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

NOW()

或者,或者,只需转换为/ mysql> SET GLOBAL time_zone = timezone;全面转换 - 确保您何时转换会话所在的时区。

答案 1 :(得分:0)

我已经使用PHP解决了这个问题。

$dt_obj = new DateTime($row['DateTime'], new DateTimeZone('America/Chicago')); 
$dt_obj->setTimezone(new DateTimeZone('Europe/London')); 
echo $dt_obj->format('d-m-Y H:i:s');

这是有效的,因为我在美国的服务器是在CST =芝加哥时区。我还删除了所有修改mysql时区的尝试。我确定更改服务器时区是某些人的解决方案,但我在共享服务器上,因此没有权限。

我现在的问题是 - 有没有办法让我的网站在全球范围内运作?即通过检测用户运行时?我认为这需要javascript。

答案 2 :(得分:0)

请查看此代码以执行正确的结果:

date_default_timezone_set('Europe/London');
mysql_query("SET time_zone = '".date('P')."';");