2012-04-24 23 views
0

我正在開發一個API使用PHP,我只是發送查詢結果作爲JSON字符串。結果是多個表的組合。然而,其中一個領域是時間。我需要根據不同表中的時區設置將其轉換爲不同的時區。時區計算。 PHP函數與MySQL函數

下面是電流輸出:

 Array ("Show_name" => "Billards", 
      "Show_type" => "Movie", 
      "Start_Time" => "2011-11-09 07:00:00", 
      "End_Time" => "2011-11-09 09:00:00", 
      "Open" => "Yes" 
      ); 

開始時間和結束時間是美國東部時間在默認情況下所有記錄。時區設置存儲在具有Timezone_ID,GMT_offset和DST_offset字段的不同表格中。基於這些設置,start_time和end_time(默認情況下爲est)應該轉換爲各自的時區。

我最初計劃編寫一個MySQL函數來從查詢本身計算這個權限,這樣JSON格式/字段不會改變。但是我發現,與PHP函數相比,它的速度太慢了。

根據你的經驗你有什麼建議? - 有沒有一種方法可以在查詢中簡單計算? - MySQL函數比PHP執行得更好嗎? - 如果我需要使用php函數,我需要遍歷所有記錄來計算此值。不知道是否需要單獨提取時區記錄。因爲我不想在JSON響應中更改字段的格式/數量。

還有其他更好的方法嗎?

+0

如果在數據庫中的所有時間存儲在UTC或UTC時間戳,會讓生活變得更輕鬆,當你必須把它調整到一個不同的時區。在將EST轉換爲所需時區之前,您必須考慮EST偏移量和DST。儘管做出這樣的改變可能爲時已晚。 – drew010 2012-04-24 18:29:50

+0

@ drew010,是的,我現在無法更改數據庫架構:-( – 2012-04-24 18:31:34

+1

你看過[CONVERT_TZ()](http://dev.mysql.com/doc/refman/5.5/en/date-and - 時間 - functions.html#function_convert-TZ)? – drew010 2012-04-24 18:41:25

回答

1

我通常在數據庫端做這件事。請注意,我將所有日期作爲UTC存儲在數據庫中。

所以,數據顯示在用戶的本地時區的用戶,我做這樣的事情:

SELECT Show_name, Show_type, 
    Start_time, CONVERT_TZ(Start_time, 'UTC', 'EST') AS Start_time_local 
FROM Shows 

在哪裏「EST」是用戶在自己的喜好選擇的時區。

將數據庫中的日期從EST更改爲UTC不需要更改模式,因爲時區未存儲在模式中。

所有的日期轉換,從美國東部時間爲UTC,只要做到這一點:

UPDATE Shows 
SET Start_time = CONVERT_TZ(Start_time, 'EST', 'UTC')