2012-06-04 25 views
-1

我使用date('H:i:s', (time() - $start['time']))來顯示自腳本啓動以來傳遞的時間。PHP的日期使用結果爲2小時錯誤

任何的time() - $start['time']結果 - 或者是0,17或任何日期打印出像02:00:00,2時○○分17秒等

可能是什麼原因?

+2

硬盤沒有你說告訴我們,你怎麼設置$啓動[「時間」] – clentfort

+0

那麼,這是否$啓動[「時間」]從何而來?你爲什麼不簡單地使用microtime()? –

+0

你在哪裏開始'$ start ['time']' –

回答

1

time返回一個絕對值數字時間戳,比如數字值爲2012-06-04 16:35:12。你的開始時間是一個類似的數字,絕對時間戳。從另一個減去一個將導致一個非常小的數字,這也是一個絕對的時間戳。可能在1970年左右的某個時間。當您使用date('H:i:s')格式化時間戳時,您只顯示時間戳的時間部分,如1970-01-01 02:00:00

閱讀關於UNIX timestamps actually represent的內容。

您正在尋找的時差是time() - $start['time']的結果,以秒爲單位,無法簡單使用date()進行格式化。更多沿線:

$diff = time() - $start['time']; 
echo 'Difference in seconds: ' . $diff; 
echo 'Difference in minutes: ' . $diff/60; 
echo 'Difference in hours: ' . $diff/60/60; 
+0

實際上這並不重要,因爲他只顯示小時,分鐘和秒。如果他對絕對日期不感興趣,那就沒有問題了。 – clentfort

+0

將相對時間戳增量視爲取決於時區設置等的絕對時間戳將始終存在問題。時間變化和絕對時間戳根本不是一回事。 – deceze

0

似乎你已經添加2H偏移量。

// save current TZ 
$current_tz = date_default_timezone_get(); 
// Use universal time 
date_default_timezone_set('UTC'); 
$t = time(); 
echo "T:".$t."<br/>"; 
sleep(2); 
echo "T2: ".date('H:i:s', time() - $t); 
// return correct TZ 
date_default_timezone_set($current_tz); 

如果我試試這個代碼不date_default_timezone_set( 'UTC'),它給了我預期值+ 1H從夏令時(GMT + 1)。如果你只需要兩次差值,你可以使用UTC,你只能得到差值OR,你可以檢查當前的時間偏移量並減去它。

希望它可以幫助