2012-02-27 162 views
0

從我的Android智能手機的應用程序(由我自己做)我發送一個請求到服務器在丹佛救我的位置和時間的工作。它節省的TIMESTAMP是丹佛現在的時間(與當地時間相差9小時)。現在從我在我的PHP腳本寫的最後一個請求時間戳和時區

$query = "SELECT * FROM `tblLoc` WHERE datetime > (CURRENT_TIMESTAMP - 86400)"; 

這樣,如果我想告訴我過去的24小時16小時後....

,這是錯誤的!

$query = "SELECT * FROM `tblLoc` WHERE datetime > CURRENT_TIMESTAMP() - INTERVAL 24 HOUR"; 
在SQL 86400

!= 24小時!

+0

您可以添加使用插入或更新表tblLoc查詢? – 2012-02-27 13:58:22

+0

請儘量將您的問題歸結爲其本質;有沒有什麼辦法可以使你對問題的描述更簡單**和更清晰**? – 2012-02-27 14:03:10

+0

我認爲這個問題很清楚。他的服務器在丹佛時間,但他需要它在亞洲/耶路撒冷時間。他沒有得到他期待的結果,因爲這一點。也許這個問題有點冗長,但我認爲這個問題已經足夠清楚了。 – Travesty3 2012-02-27 14:06:10

回答

1

您需要更改MySQL's time zone而不是PHP的,或者改變您的查詢,以便PHP提供的時間,像這樣:

$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)"; 


編輯基於評論

UTC_TIMESTAMP()可能一個好的方法,但要確保你基於同樣的時間戳插入/更新,而不是基於CURRENT_TIMESTAMP()

UTC時間戳是基於GMT(格林威治標準時間)和在GMT + 0。達拉斯在格林威治標準時間6點,亞洲/耶路撒冷在格林威治時間2點。因此UTC_TIMESTAMP()始終表示GMT時區中的當前時間,無論您當前的時區設置是什麼。 CURRENT_TIMESTAMP()表示當前時區中的當前時間。

無論其結果可能仍然不是很正確。他們可能現在看起來不錯,但可能會在幾個小時後關閉。但是,如果您根據CURRENT_TIMESTAMP插入和更新,然後根據UTC_TIMESTAMP進行選擇,則結果將不正確。

我建議以下三種解決方法之一:

  1. 服務器的時區切換到亞洲/耶路撒冷(一定要重啓MySQL應用更改)。
  2. 使用在每個腳本的開始設置時區「SET的time_zone =時區;」。
  3. 與做正確的時區一個TZ環境變量,MySQL會將該時區上啓動默認的(再次,一定要重啓MySQL)。
+0

@qpaycm:查看更新的答案。另外,如果我的答案是解決您的問題,請使用該帖子的投票按鈕下方的複選標記將其標記爲您接受的答案。 – Travesty3 2012-02-27 15:25:33

+0

@qpaycm:我的錯,沒有意識到。再次查看更新的答案。 – Travesty3 2012-02-27 15:50:13

+0

奇怪:)我剛剛嘗試過DATE_SUB(CURRENT_TIMESTAMP(),INTERVAL 3小時)工作完美!它似乎是86400!= 1天 - 這是問題所在 – qpaycm 2012-02-27 18:43:01