1

我将 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:将主题更改为更接近问题/答案。

4

3 回答 3

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;
于 2012-10-11T18:46:25.570 回答
0

改为使用utc_timestamp,并自己转换为用户的时区。

UTC_TIMESTAMP 是全球公认的当前 UTC 日期和时间。

只要您知道您的用户在哪里以及他的时区是什么,您就可以通过添加正确的偏移量来转换它。

如果您不知道用户想要的时区是什么,那么您就会遇到不同的问题 - 基本上您需要以某种方式找出答案。

于 2012-10-11T14:47:37.117 回答
0

使用CONVERT_TZ()函数: http ://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_convert-tz

于 2012-10-11T18:34:53.400 回答