2010-03-16 132 views
0

Hai從php的時區計算時間

我的系統中員工在他們的個人資料中有不同的時區。我想根據他們指定的時區顯示日期。 GMT時區值被放置在數據庫中。 你能幫我嗎

+0

「GMT時區值被放置在數據庫中」 - 以什麼格式/字段類型? – VolkerK 2010-03-16 09:20:57

回答

0

除了DAV的回答我提出的所有時間數據存儲在「時間戳」 MySQL的數據類型,因爲它會自動處理時區

1

比方說,您的服務器位於美國和存儲日期與美國當地GMT數據庫-7。

因此,您發送本地偏移量-7和員工國家的偏移量,可以說在歐洲的某個地方+2。

所以基本上你只需要知道什麼是-7 -2和它的9小時偏移量,所以你存儲在數據庫中的每個日期必須添加9個小時來表示在歐洲的時間。

這將計算偏移:

fnGetOffset($source_gmt_offset ,$fltGmtOffset) 
{ 
    $intGmtOffest = $source_gmt_offset - $fltGmtOffset; 
    if($intGmtOffest <> 0) 
    { 
     return $intGmtOffest; 
    } 
} 

你算偏差之後,你只需要從DB獲得的日期和添加到它的偏移量。

就像是:

$intUnixTimeStamp += $intGmtOffest*60*60;

所以這是用PHP做的正確方法。

如果您想根據用戶選擇的時間查詢服務器,則需要返回-9。

+0

謝謝亞歷克斯,請你給我一些例子日期鍛鍊 – Thinker 2010-03-17 05:34:01

+0

你非常歡迎,我發佈了與MySQL代碼示例的答覆。 – alex 2010-03-23 09:56:30

0

讓說:

貴公司的本地時間爲格林威治時間美國(-6)的一些情況,以及我們必須在荷蘭與GMT(+2)的僱員。

所以,你會想要做的是:

  1. 在你的數據庫保存在公司當地時間事件日期。

  2. 現在,當您查詢您的數據庫的可用日期時,首先檢查員工國家以獲得他的抵消。

    • 如果它的荷蘭員工的數字爲+2,那麼您知道數據庫中的所有日期都存儲爲本地公司時間gmt -8。 所以它實際上是一個從gmt = -8的-6 - +2偏移量。現在,如果我們想從服務器時間到荷蘭的員工,我們只需要將時間偏移8小時。

最好的事情是它適用於SQL查詢應該是這樣的:

$symb= "+"; 
$intGmtInterval= 8; 

DATE_FORMAT(CONVERT_TZ(my_event,'+0:00','$symb$intGmtInterval:00'),'%W') 

所以這實際上將增加任何日期,導致在你的主查詢8個小時的偏差。