2013-04-01 30 views
2

我非常困惑於設置時區。 我正在開發一個PHP論壇,因爲我不確定是否顯示回覆時間。如何設置不同位置的時區?

下面是條件,

一個問題發佈在2013年4月1日上午10時(時區「亞洲/加爾各答」)。有人在2013年3月31日晚上11點30分很快回復,因爲回覆者的時區是'America/Chicago',時間爲-10.30小時。

我的問題是如何管理不同地點的時區?

在上面的例子中,應該向顯示問題並獲得答覆的用戶顯示什麼時間?

什麼應該顯示給回答問題的用戶?

我使用PHP的時間函數作爲字符串在數據庫中插入時間記錄。 並顯示時間我用

date("d m Y h:m a", strtotime($time)); 

以上代碼$時間的價值是來自於數據庫中。

謝謝..

+0

use date_default_timezone_set('America/Los_Angeles'); –

+0

您可以在服務器上使用一個統一的時區(例如UTC),並在客戶端上使用Date.getTimezoneOffset()來確定客戶端的偏移量,並根據該偏移量輸出相關時間。 – Passerby

+1

你從哪裏得到'$ time'?如果來自用戶,那麼不要。 –

回答

3

我會用gmdate(),使他們GMT-基於存儲日期和時間到數據庫:

$d = gmdate('Y-m-d H:i:s'); 
// store $d into database 

當你渲染頁面,你考慮到了用戶的時區首選項:

date_default_timezone_set('Asia/Singapore'); 
$ts = strtotime($date_from_db . ' GMT'); 
$date_on_page = date('Y-m-d H:i:s', $ts); 

或者您可以讓JavaScript處理時間轉換。

更新

你也可以在數據庫中存儲UNIX時間戳;就我個人而言,我喜歡有DATETIME列,因爲當你試圖調試某些東西時,這些列是更容易解碼的:)

+0

+1表示需要參考點。 – Emissary

+0

謝謝,這非常有用。但是對於不同的用戶位置,我怎樣才能設置時區? – Sachin

+0

@Sachin您可以用GMT發送時間並讓JavaScript處理時區;如果你的用戶可以在數據庫中設置他們的時區,你當然也可以使用PHP來處理它:) –

0
date_default_timezone_set('America/New_York'); 

此功能時使用了默認時區在PHP。

這裏是tutorial的鏈接。

並更改時區使用:

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

這裏是timezones列表。