2012-03-06 140 views
2

我存儲在格林尼治標準時間的MySQL數據庫的一些日期。
假設客戶的時區偏移量是-540;我將如何更正來自數據庫的datetime以反映這一點?是否有一個方便的功能,我可以通過日期,或者我需要相應地添加或減少。PHP添加或減少時區偏移

+0

使用'timestamp'的MySQL數據類型和mysql會爲你做那個 – zerkms 2012-03-06 08:47:10

+0

Ho它能做到嗎?它確實不知道客戶的時區。我想它會根據服務器時區來做它沒有?我全是耳朵 - 謝謝。 – Chin 2012-03-06 08:48:21

+0

你可以爲每個連接設置客戶端時區,並且mysql會爲你做所有的偏移工作。關於SO – zerkms 2012-03-06 10:02:58

回答

3

既然你已經在格林尼治標準時間格式的數據的項目,你必須將它們轉換爲時間標記,使用strtotime,這裏更多的信息:http://php.net/manual/en/function.strtotime.php 一旦你有時間戳記,你可以減去偏移量(540次60秒)從它,然後將結果轉換爲一個新的日期字符串,使用date,這裏更多的信息:http://php.net/manual/en/function.date.php

下面是代碼,可能這一個版本:

$dbValue = $row['date']; 
$timestamp = strtotime($dbValue) - (540*60); 
$result = date("Y-m-d H:i:s", $timestamp); 
+0

,這裏有數百萬次討論。謝​​謝 - 我將字段更改爲數據庫中某種時間戳的優點和缺點。在這一點上,如果它能更好地爲我服務,這是一個選擇。 – Chin 2012-03-06 09:05:04

+0

我認爲我們正處於正確的軌道上。但上面的代碼需要9分鐘而不是9小時。 – Chin 2012-03-06 09:13:45

+0

在我的頭頂,我必須說一個con會是在整個項目中顯示它們的事實,您將不得不將時間戳轉換爲日期字符串,但我想不出任何其他缺點。贊成,你可以很容易地按日期排序行,因爲時間戳基本上是數字。你可以使相對計算更容易,就像你最初的問題一樣。希望這可以幫助。 – 2012-03-06 09:14:59

3

也許這個片段將幫助您:

$format = 'Y-m-d'; 
$obj = new DateTime(); 
$date = date($format, strtotime($obj->format('Y-m-d H:i:s')) - $obj->format('Z')); 

http://www.php.net/manual/en/class.datetime.php有關進一步的讀數。