2014-09-30 74 views
0

將記錄添加到數據庫時,我使用MySQL NOW()函數爲列添加日期標記。但是,我的服務器位於世界的一半,並且與我有不同的時區。將存儲的數據庫日期更改爲當前時區(strtotime?)

從數據庫中拉出日期戳時,我需要將其值調整+8小時,以便在我的網站上顯示「正確」時間。但是,我需要strtotime它創建一個可用的日期在第一個地方,然後strtotime它到+8小時,然後strtotime它將其改變爲所需的格式,對不對?

我試過多次迭代的語句,但我可以得到30 Sep 07:3501 Jan 00:00結果,而不是要求的30 Sep 15:35

的值存儲在數據庫中datetime格式:2014-09-30 07:35:36

之一許多事情我已經嘗試過失敗:

$chat_time = date("Y-m-d H:i:s", strtotime($chat_time)); 
$chat_time = strtotime("+8 hours"); 
$chat_time = date("d M, H:i", strtotime($chat_time)); 

回答

3

您可以使用DateTime()DateTimeZone()調整爲的時區日期時間值:

$chat_time = new DateTime($chat_time, new DateTimeZone('DB_TIMEZONE')); 
$chat_time->setTimezone(new DateTimeZone('YOUR_TIMEZONE')); 
echo $chat_time->format("d M, H:i"); 

顯然您需要將DB_TIMEZONEYOUR_TIMEZONE具有有效值。你可以得到他們的清單here

+0

作品的魅力,謝謝。 – mpdc 2014-09-30 15:09:15

1

你最好設定時區的連接上,NOW()和喜歡,然後將返回正確的一個:

SET time_zone = 'Europe/Amsterdam' 

這是一個SQL查詢。連接後需要執行它。

當然,這只是針對新的插入和更新,您還需要修復現有:

UPDATE table SET datetimeColumn = DATE_ADD(datetimeColumn, INTERVAL 8 HOUR) 
+0

一個好主意,以防止在未來這個問題,謝謝。 +1 – mpdc 2014-09-30 15:05:37

+0

不建議將連接設置爲本地時區,我建議使用UTC保存時間戳以消除歧義。使用'UTC_TIMESTAMP()'而不是'NOW()'。 – DerVO 2014-09-30 15:23:34

相關問題