2012-11-26 157 views
0

我一直在使用DATETIME列將用戶消息存儲在我的數據庫中。我需要將消息的發送時間顯示給不同國家的用戶,因爲數據庫使用GMT + 0我需要將檢索到的時間調整到用戶的時區。獲取時區GMT時間?

當前用戶的時區已設置爲date_default_timezone_set()如何獲取GMT +時間?

編輯

繼的想法@doniyor這是我做過什麼:

// Get server hour 
$localtime = localtime(); 
$serverHour = $localtime[2]; # The server's timezone is used by default before defining one 

// Set timezone 
date_default_timezone_set('user's timezone goes here'); 

// Get user hour 
$localtime = localtime(); # Now localtime gives the user's time since timezone has been changed 
$userHour = $localtime[2]; 
$timeAdjustment = $userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : $userHour - $serverHour; // Calculate hours to add to rows got from db to match user's time 

// Example of a row adjusted to match user's time 
    $adjustTime = ($userHour - $serverHour < -12 ? 24 + $userHour - $serverHour : ($userHour - $serverHour > 12 ? $userHour - $serverHour - 24 : $userHour - $serverHour)*60*60; // strtotime is in seconds so $timeAdjustment needs *60*60 to convert to seconds too 

我測試過這在PHP5 + Apache的,但可能的結果取決於服務器的配置。

+0

嘗試使用Unix的時間戳,然後將其轉換爲日期 – Andrew

+0

它使用的只是網頁建立日期時間,所以可能如果我改變時間戳我會得到很多錯誤 – lisovaccaro

回答

0

如果錯了,請不要:) downvote

如果你在客戶端瀏覽器時區時間和檢查的差異,如果有差異,然後添加或根據。減去在客戶端的位置,這個差值。

+0

你的意思是比較我的服務器和用戶的時間?這將工作,但我不知道如何獲得數據庫/服務器用來比較它與用戶的當前時間 – lisovaccaro

+0

還必須有一些像get_server_time()函數,我在路上,現在不能谷歌:D – doniyor

+0

我瀏覽了一下,但找不到這樣的功能,但是我發現只是在設置用戶的時區之前花時間使用服務器的默認時區來有效地獲取服務器的時間。所以我只是在設置時區之前得到它,然後再獲取用戶的時間。我接受了答案並複製了代碼。 – lisovaccaro

1

當前用戶的時區已設置爲date_default_timezone_set()如何獲取GMT +時間?

你不行。由於夏令時變幻莫測,偏移量不是恆定的 - 它可以根據日期變化。

使用gmmktime()(連同一些字符串解析)將GMT日期/時間轉換爲UNIX時間戳,然後使用date()在當前時區中顯示該日期/時間。

1

只需將日期值的值作爲UNIX時間戳傳遞給JavaScript即可。例如,使用AJAX:

echo json_encode(array(
    'time' => strtotime($row['msg_time']), 
    'msg' => 'hello world', 
)); 

然後,使用Date()將其轉換成用戶的本地時間:

var msgTime = new Date(data.time * 1000);