2012-11-07 52 views
0

我已在以秒爲UTC偏移,存儲在數據庫中的所有時間戳是UTC,如何在選擇查詢申請偏移,獲取從MySQL數據庫Unix時間戳和偏移應用

mysql_query("SELECT * FROM table WHERE unix_timestamp=unix_timestamp with offset applied"); 

mysql_query("INSERT INTO table (unix_timestamp) VALUES(UNIX_TIMESTAMP())"); 

我會希望以UTC時間插入數據庫並在當地時間檢索。

在PHP:

date_default_timezone_set('UTC'); 

$user_timezone_offset=-7200; // -2 

莫非我的。減去選擇的運行時的MySQL的UNIX_TIMESTAMP場$ user_timezone_offset,這將是它?

我在UTC中插入,這是我明顯需要的,但對於用戶的本地時間選擇,我需要將偏移量以某種方式應用於存儲在數據庫中的時間戳。

編輯:我只是碰到這種傳來:

$user_timezone_offset="-2:00"; 

FROM_UNIXTIME(CONVERT_TZ(unix_timestamp,'+00:00','$user_timezone_offset')) 

需要知道如何將其應用到選擇查詢使UNIX_TIMESTAMP的選擇轉換爲內部的選擇和結果也越來越修改PHP的比較fetch_array

這似乎是解決辦法:

SELECT *, Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) as unix_timestamp 

其實這有一個問題 - 雖然

mysql_fetch_array($result){ $row['unix_timestamp']; } 

同時

WHERE unix_timestamp=value //assuming unix_timestamp 

檢查在選擇要轉換自帶轉換 - 在那裏它不轉換,另一個

Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) 

必須呼籲UNIX_TIMESTAMP是「轉換「每次需要對轉換後的值進行檢查。

+1

爲什麼你需要在mySQL中這樣做,你不能在你用來查詢數據庫的計算中進行計算嗎? –

回答

0

我認爲你可能會使問題過於複雜。

時間戳總是UTC。當您在PHP中檢索時間戳時,它使用UTC。

例如,當您使用date()函數轉換時區時,它會在任何時區顯示php.ini設置date.timezone設置爲。

因此,如果您有具有特定時區的用戶,只需在當地時間顯示日期之前撥打date_default_timezone_set()並選擇合適的時區即可。

如果您使用DateTime類,則可以在構造對象時指定所需的時區。

除非您有一個非常具體的原因,否則當您從數據庫獲取時間戳時,不應該執行時區轉換。 PHP爲您處理這一切。

+0

我也有這個問題。我按天彙總數據,結果集是key = dayte_timestamp和value = some_value的關聯數組,當我想直接從PHP訪問數組元素時,我有時區問題,因爲MySQL添加了時區偏移量 – dzona