2012-04-01 50 views
0

我在顯示剩餘時間方面遇到了一些問題。PHP時間差錯

這是我的代碼:

echo date("H:i:s", $show_job['deadline'] - time()); 

我的服務器時區爲:歐洲/阿姆斯特丹

這是進入數據庫的時間爲:

$currentTimestamp = time(); 
$in24hourstime = strtotime("+24 hours", $currentTimestamp); 

問題例如,我的一些用戶獲得了10個小時而不是24個小時。我的猜測是這些用戶來自不同的時區。我在倫敦。

什麼可能導致此錯誤?先謝謝了。

+0

Offtopic:爲什麼不是'+1天'? '+24小時'將導致支持夏季/冬季時間的時區出現問題。 – Basti 2012-04-01 19:39:53

+0

我不認爲這可能是錯誤。我在其他地方使用此代碼,這是2分鐘,一些球員得到11小時2分鐘。我會盡力而爲,謝謝。 – 2012-04-01 19:41:18

+0

'$ in24hourstime = $ currentTimestamp + 86400;' – kijin 2012-04-01 20:30:28

回答

1

首先它是一個好主意,使用PHP日期函數像這樣明確設置默認的時區在你的腳本:

date_default_timezone_set('Europe/London'); 

http://php.net/manual/en/function.date-default-timezone-set.php

這將確保所有的日期計算使用正確的內部時區。將日期顯示回用戶時,您可以相應地將時間調整到其時區。

修改您的例子稍微讓現在在24小時內創建一個UNIX時間戳兩個變量:

$now = time(); 
$in24hourstime = strtotime("+24 hours", $now); 

要計算我們可以減去一個從其他的差異給我們在幾秒鐘的差別:

$remaining = $in24hourstime - $now;  

在我們的例子中,$ remaining的值是86400秒。如果此值爲0或負數,我們可以假定截止日期已過。

if($remaining > 0) { 

    $hours = intval(intval($remaining)/3600); 
    $minutes = intval(($remaining/60) % 60); 
    $seconds = intval($remaining % 60); 

    echo $hours . ' hours, '.$minutes.' minutes and '.$seconds . ' seconds remaining!'; 

} else { 

    echo "Deadline has been met. No time remaining!"; 
} 

順便說一句,你可能會發現使用PHP的DateTime類有用,因爲在我看來,它提供了內置的時間()和日期()和更簡單的方法很多好處處理時區:

見:http://php.net/manual/en/book.datetime.php

+0

時區實際上是服務器的默認時區。我實際上使用了一種類似於你的方法,它似乎目前工作。如果沒有,我會用你的,但你的答案! – 2012-04-01 20:52:14