2015-05-27 57 views
1

我開發了一個應用程序,它記錄了某些記錄何時被修改和創建,所以基本上我們使用time()函數來記錄更改何時被保存。PHP時區問題| BST和GMT

我在英國,所以我的時區必須是格林威治標準時間。然而,在英國,我們使用DST,所以在夏天,我們不再是格林威治標準時間,而是BST。

我將如何更改使用BST(即GMT + 1)的時區。我想在我的php文件中聲明它,以便輕鬆更改。以下是我目前所面對的:

date_default_timezone_set("UTC"); 

當我將其更改爲:

date_default_timezone_set("BST"); 

我得到一個PHP錯誤Timezone ID 'BST' is invalid,當我將其更改爲歐洲/倫敦,但仍保持格林威治標準時間而不是BST

+0

date_default_timezone_set('Etc/GMT-1'); – Omar

回答

2

您將設置您的時區爲Europe/London,該時區在適當的日期自動在GMT和BST之間轉換。時區包括這些信息,這基本上是時區的點(在PHP意義上)。

PHP手冊輕易確切地包括this as a sample

$timezone = new DateTimeZone("Europe/London"); 
$transitions = $timezone->getTransitions(); 
print_r(array_slice($transitions, 0, 3)); 

Array 
(
    [0] => Array 
     (
      [ts] => -9223372036854775808 
      [time] => -292277022657-01-27T08:29:52+0000 
      [offset] => 3600 
      [isdst] => 1 
      [abbr] => BST 
     ) 

    [1] => Array 
     (
      [ts] => -1691964000 
      [time] => 1916-05-21T02:00:00+0000 
      [offset] => 3600 
      [isdst] => 1 
      [abbr] => BST 
     ) 

    [2] => Array 
     (
      [ts] => -1680472800 
      [time] => 1916-10-01T02:00:00+0000 
      [offset] => 0 
      [isdst] => 
      [abbr] => GMT 
     ) 

) 
+0

如上所述,我已將它更改爲歐洲/倫敦,但它仍然使用GMT而不是BST(它的一小時後) – Eclipse

+0

然後,您可能需要[更新您的時區數據庫](http://php.net/manual/) EN/datetime.installation.php)。如果它已經過時並且現實世界中的時區定義發生了變化,那麼您的PHP將不會擁有此信息。 – deceze

+0

你能否請我在哪裏插入時區數據庫中的文件到哪裏的一些見解?謝謝 – Eclipse

1

time()函數返回一個Unix時間戳,它總是將要基於UTC(這是一樣的GMT)。對於BST或任何其他時區進行調整將是無效的。

還有其他一些函數用於處理本地時間,並將unix時間戳轉換爲字符串以供顯示。這就是您使用Europe/London時區的地方。

BST無效,因爲它可以代表「孟加拉國標準時間」或其他幾個時區。一般來說,不要依賴時區縮寫。