2010-09-05 47 views
3

我有插入一个日期到表一些PHP代码的随机时间偏移:PHP time()函数返回一个小时

INSERT INTO tblEventLog VALUES ... date("Y-m-d H:i:s",time()) ... 

这样做的结果通常是正确的,但是偶尔日期是一个小时后面:

315070 05-Sep-10 18:08 
315069 05-Sep-10 18:07 
315068 05-Sep-10 18:07 
315067 05-Sep-10 18:06 
315066 05-Sep-10 18:06 
315065 05-Sep-10 17:04 
315064 05-Sep-10 18:01 

什么可能导致这种情况?只有一台服务器。

编辑:
使用NOW()工作!
问题是,其中一个PHP页面正在更改时区(创建RSS提要时),PHP time()函数正在提取它。使用数据库来设置时间固定的东西。

+1

如果你忽略'time()'而只是说'date(“Y-m-d H:i:s”)'? – BoltClock 2010-09-05 18:03:01

+1

您的所有请求是否都来自同一时区? – fredley 2010-09-05 18:03:13

+1

@fredley:时区由运行PHP的服务器决定,而不是由请求决定。在这种情况下,只有一个服务器,所以我的猜测只涉及一个时区。 – BoltClock 2010-09-05 18:06:07

回答

2

我不知道什么可能会导致此。不过,我建议将列数据类型切换到DATETIME,如果您只是插入当前时间,那么使用MySQL的NOW()函数,而不是在PHP中占用时间。数据库中直接做的越多越好。这样做可能会完全消除这个错误。

+0

或者将列的默认值设置为'CURRENT_TIMESTAMP',并在插入过程中将其保留。 – BoltClock 2010-09-05 18:08:46

+0

这两个很好的建议,我试着NOW()函数,将看到它是如何工作的。 – soupagain 2010-09-05 18:16:12