2010-09-05 72 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