我的服务器在美国,我在英国。
我使用默认的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>";
}
任何帮助都会非常感激!
答案 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')."';");