3

在我的PHP.ini文件中,我像这样设置时区......

'America/New_York'

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

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

我根据“我的”系统时间获得了正确的日期时间,因为这就是我要比较的时间,并且也想存储在我的 MySQL 数据库中。(据 PHP 报道)。

现在的问题是,我将 MySQL db 导出为 PDF 格式,只是为了看看它的样子,时间是 1 小时前,例如......这里是(上午 10:00),PDF 页脚说(9: 00 点)


所以..我开始思考..我的PHP脚本将INSERT我需要的正确日期时间输入数据库..但是我有很多日期时间比较帐户,

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

我试过运行(phpMyAdmin SQL Query)

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

但是当我运行查询时

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

我回来SYSTEMSYSTEM

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

如果我NOW()在查询中使用 MySQL 函数,输入到数据库的时间将由 MySQL根据它自己的 timezone计算。

像这样..

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

我知道我必须在 PHP 中进行所有的插入和比较以保持正确的时间.. 但是在上面的情况下,它会插入错误的时间。

所以这是我的困境......

但这会影响我没有预见到的任何事情吗?我只是觉得这会以某种方式影响我的时代。

那么我怎样才能解决这个问题或在同一时区获取 MySQL 呢?并确保我所有的日期/时间都是正确的,而不是落后 1 小时..

4

2 回答 2

1

通过 PhpMyAdmin 连续运行的两个查询将在两个单独的会话(连接)中执行,因此SELECT @@session.time_zone单独总是返回“SYSTEM”。

我怀疑您可以(并且希望您不能)更改共享服务器上的全球时区,因此请始终期望SELECT @@global.time_zone. 另一方面,您应该能够更改会话的时区。

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

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

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

于 2013-08-22T12:29:17.960 回答
0

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

于 2013-08-20T15:36:25.687 回答