MySQL and PHP TimeZone


MySQL and PHP TimeZone

在我的PHP.ini文件中,我将时区设置为…

'America/New_York'

所以当我运行一个简单的phpDate()函数时

echo date("Y-m-d H:i:s");

我根据"我的"系统时间获得正确的日期时间,因为这是我正在比较的,并且希望存储在我的MySQL数据库中。(据PHP报道)。

现在的问题是,我将MySQL数据库导出为PDF格式,只是想看看它是什么样子,时间是1小时前,例如,现在是(上午10:00),PDF页脚显示(上午9:00)


所以我开始思考。。我的PHP脚本将INSERT放入数据库中我需要的正确日期时间。。但我有很多关于账户的时间比较,

我知道如果我在phpMyAdmin中运行任何MySQL查询,那么我会得到错误的日期时间。

我已尝试在(phpMyAdmin SQL查询)中运行

SET time_zone = 'America/New_York';
-and-
SET time_zone = '-05:00';

但是当我运行查询时

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

我得到了SYSTEMSYSTEM

(我还应该提到我在共享主机上)

如果我在查询中使用MySQL NOW()函数,那么输入数据库的时间将由MySQL计算,根据其自己的时区

像这样。。

mysql_query("INSERT INTO table (id, value, time_created) 
                        VALUES ('{$id}', '{$value}', NOW())");

我知道我必须用PHP进行所有的插入和比较,以保持时间正确。。但是使用以上内容,它将插入错误的时间。

这就是我的困境。。。

但这会影响到我没有预见到的事情吗?我只是觉得这会影响我的时代。

那么,我该如何绕过这一点,或者在同一时区使用MySQL呢?并确保我所有的日期/时间都是正确的,而不是一个小时后。。

通过PhpMyAdmin连续运行的两个查询将在两个独立的会话(连接)中执行,因此仅SELECT @@session.time_zone将始终返回"SYSTEM"。

我怀疑您是否可以(也希望您不能)更改共享服务器上的全局时区,所以请始终期待SELECT @@global.time_zone的"SYSTEM"。另一方面,您应该能够更改会话的时区。

尝试在一次执行中运行这两个查询,它应该显示新的时区:

SET time_zone = '-05:00'; SELECT @@session.time_zone; -- same session

NOW()返回当前会话时区中的时间,所以时区确实很重要。然而,我宁愿将时间存储在GMT时区,但我想这更多的是一个品味问题。

根据您可以做什么和不可以做什么(在共享主机上),您可以选择使用以下语句作为所有查询的开始:例如:"set time_zone='-05:00';""set time_zone='-05:00'; select foo from bar;"或(可能是最可靠的选项):只在表和查询中使用时间戳,并根据收到的时间戳在PHP中创建DateTime对象。