2011-10-06 18 views
3

可能重複:
Datatype/structure to store timezones in MySQL如何在mysql中存儲用戶時區?

我將只存儲在我的數據庫UTC時間,並想用PHP的時間戳轉換爲用戶的本地時間。

我的問題是,將用戶時區存儲在數據庫中的最佳方式是什麼?

IE:-400,-4,-4:00

雖這麼說,我知道該怎麼做手工的數學:

$utc_time = strtotime("2011-10-02 23:00:00"); 
$my_time = $utc_time - 14400; 

echo date($timeformat, $mytime); 

我的問題是,與用戶的時區被拉從數據庫中,我不知道我是否會增加或減少秒數。這就是我遇到的問題,試圖找出如何保存時區,以便我可以計算偏移量。

我可以將時區保存爲「-14400」,但使用上面的例子,我不能只使用結合了兩個字符串做數學題,我 - 符號:

$my_time = $utc_time.$timezone; 

所以。 ..我如何正確保存時區以完成數學計算?

+0

爲什麼不只是做數學如: $ my_time = $ utc_time - $ timezone * 3600; – Joost

+0

因此,如果我將它保存爲TIME,那麼數學如何完成? – Oseer

+0

@ JoostvanDoorn-我不知道它是+還是 - ...這是我想弄清楚的問題。 – Oseer

回答

4

在一個地點的時區並不總是相同的 - 例如,英國是3月到10月之間的BST(GMT + 1)。使用PHP所支持的時區的一個:

http://php.net/manual/en/timezones.php

如果繼續使用數字,要麼將其存儲爲數小時或數分鐘。將UTC/GMT以西的時區存儲爲負數。例如,美國東海岸將爲-5(小時)或-300(分鐘) - 假設它滯後5小時。

然後,將此添加到時間戳 - 負面或正面將處理其餘。

// for 5 hours behind when stored as hours (-5) 
$now = time() + ($offset * 60 * 60); 
// for 5 hours behind when stored as minutes (-300) 
$now = time() + ($offset * 60); 
+0

我認爲'$ now = time()+($ offset * 60)'這行會是'$ now = time()+($ offset * 60 * 60);' –

+0

@RezaMamun謝謝,我想你'再右吧。我已經更新了我的答案。 –

0

而不是將其存儲爲一個字符串,將其存儲爲一個數字?然後,您可以簡單地將該號碼添加到時間戳。 (這個數字可能是負數的時區將被減去。)

相關問題