如何弥补MySQL时区差异?

时间:2012-10-11 14:42:51

标签: php mysql sql timezone

我将从PHP脚本发送的MySQL中的时间存储为CURRENT_TIMESTAMP。这使得时间从错误的时区开始,距离我不到1小时。我不是超级用户,所以SET GLOBAL time_zone = 'Europe/London';将不起作用。无论如何我可以修改输入或输出查询以补偿1小时?

这是我当前的sql查询,从表单发送:

REPLACE INTO `order_admin_message` (`order_id`, `message`, `date_updated`)
VALUES ('$number', '$msg', CURRENT_TIMESTAMP)

然后我使用以下方式进行检索:

SELECT order_admin_message.message, order_admin_message.date_updated
FROM order_admin_message
WHERE order_admin_message.order_id = $number

编辑:要清楚,我不想显示用户的时间,只是显示当地的伦敦时间(夏季将夏令时考虑在内)。 编辑2:将主题更改为更接近问题/答案。

3 个答案:

答案 0 :(得分:2)

在PHP中,只需更改它即可显示。不要在数据库中存储与语言环境相关的日期或时间。稍后进行转换,PITA。即使您不关心用户,也只需显示您需要的时间/时区。

$tz = new DateTimeZone('Europe/London');

$datetime_updated = new DateTime($results['order_admin_message.date_updated']);
$datetime_updated->setTimezone($tz);
$display_date = $datetime_updated->format("M j, Y g:i A");

echo $display_date;

答案 1 :(得分:0)

请改用utc_timestamp,然后自行转换为用户的时区。

UTC_TIMESTAMP是当前的UTC日期和时间,正如全世界所认可的那样。

只要您知道用户的位置以及他的时区,您就可以通过添加正确的偏移来转换它。

如果您不知道用户所需的时区是什么,那么您有一个不同的问题 - 基本上您需要以某种方式找到它。

答案 2 :(得分:0)