2016-09-14 119 views
0

正如在標題中所述,由於PHP date函數和MySQL NOW()函數的存在,我發現了一個問題(這是一個非常嚴重的問題)。恢復PHP和MySQL之間的時間戳差異

這是問題,在MySQL表我有一個名爲aggiornamento列,並命名爲idesterno外部ID列,其工作原理是這樣的:

  • 在插入時,它會通過MySQL的CURRENT_TIMESTAMP插入,和在 idesterno被插入過
  • 在更新,它會檢查使用PHP的date功能idesterno和更新aggiornamento

這裏的BIG問題(相信我,這真的是一個大問題):
的MySQL NOW()CURRENT_TIMESTAMP返回正確的時間,2016-09-04 13:20:00,但PHP返回正確的太)另一個日期,這是2016-09-04 11:20:00

所以,當我在數據庫中插入新記錄時,一切順利,正如我期望的那樣,但是,當他更新時,會出現問題。

我發現區別在於時區,MySQL有我的(CEST),PHP不支持,即使它們位於同一臺服務器上(是的,非常有趣),使用date_default_timezone_get進行檢查。

所以,最後,我需要知道的是:
我知道哪一個已被更新,但我不知道CURRENT_TIMESTAMPdate('Y-m-d H:i:s)之間確切的時間差。
我想這大概需要1或2小時(基於夏令時/冬令時),但我不能不知道我是否正確地做了這件事

P.S.表格條目正在由每隔5分鐘運行的CRON更新

+0

您是否嘗試過在php.ini中設置date.timezone(http://php.net/manual/fr/datetime.configuration.php#ini.date.timezone)? – vincenth

+0

@vincenth我需要用正確的時間戳替換數據庫'aggiornamento'列,由於MySQL和PHP之間的時區不同,這實際上是錯誤的。我已經設置了PHP時區,但問題是糾正較舊的記錄,而不是現在保存的記錄。謝謝你的方式 – CapitanFindus

回答

0

因此,
主機已將「歐洲/羅馬」時區設置爲php.ini,但它以奇蹟般的方式被Wordpress重寫爲UTC。

無論如何,在發現這個之後,我強制改變了PHP腳本中的默認時區並更新了基於太陽和法定時間添加1或2小時的錯誤db記錄。