2010-07-21 65 views
13

我將使用PHP的日期和時間轉換爲時間戳,然後將它們插入到我的MySQL數據庫中。PHP strtotime()函數錯誤1小時?

我的問題是,當我使用PHP的strtotime函數輸出時間戳是我實際時間後面-1小時。

例如,考慮今天的日期:2010年7月21日。當我使用php代碼如:

<?php 
$my_timestamp = strtotime("07/21/2010"); 
echo $my_timestamp; 
?> 

發回的時間戳是GMT equivilent MINUS 1小時。即我回來了:2010年7月20日23:00:00 GMT而非2010年7月21日00:00:00 GMT。

我住在英國,所以我的時區是GMT。我使用date_default_timezone_set('Europe/London')在腳本中聲明瞭我的時區,並且我還確保php.ini文件設置爲'Europe/London'。

這可能與夏令時有關嗎?我怎樣才能解決這個問題,而無需在我的所有日​​期中添加1小時?

+0

如果您只需要在日期中添加1小時,請將3600添加到時間戳(3600秒= 1小時) – NullUserException 2010-07-21 21:24:46

+13

您的時區不是GMT,英國現在是夏令時,即GMT +1 – nos 2010-07-21 21:25:26

+2

@nos爲什麼不選擇補充說,作爲答案,我認爲這是正確的。 – 2010-07-21 21:26:22

回答

26

歐洲/倫敦時間在夏令時期間不是GMT時間。您需要將其設置爲UTC。

date_default_timezone_set('UTC');

date_default_timezone_set('GMT');可以工作,但是,由於在肯尼斯評論下方,它不贊成指出。

+3

注意:格林尼治標準時間已經在更新版本的PHP中被貶值,雖然它仍然暫時得到支持,但強烈建議UTC用於代替 – Kenneth 2012-01-02 22:31:11

+1

@Kenneth添加註釋。謝謝! – Yahel 2012-01-03 03:01:22

-9

PHP 5.3之前的strtotime有問題,計算時間,如果你增加或扣除的月份和日期等等。這是固定的,所以你現在可以告訴你具體怎麼想的那樣計算的,如果你是低於PHP 5.3我建議做在MySQL中計算日期或升級您的PHP版本。

+1

確定它不是您理解PHP的日期和時間函數是「竊聽」? – 2010-07-21 21:36:17

+0

<?php echo date(「Ymd」,strtotime(「2009- 01-31 +1個月「))。」
「;?> 試試那個 – 2010-07-21 21:39:47

+1

@Android Noob我不確定我想讓它工作1個月不是固定的測量單位。可以是28,29,30或31天,具體取決於月份,不同於其他可以工作的strtotime()解釋(+1天,+1周),這些解釋總是固定的時間量,不管何時發生。 (也就是說,我不是你的選票之一)。 – Yahel 2010-07-21 21:45:01

1

倫敦時區以夏季英國夏令時間表示。話雖如此,將時間存儲爲UTC並將時間以UTC或當地時間顯示給最終用戶是一種很好的做法。

確保您的系統時間爲UTC也可能是明智之舉。