2015-05-14 61 views
1

我在這裏有一個mysql查詢,獲取列的平均值(列數據類型是'時間')。例如,該列值: 00:00:55,00:00:59,0時01分03秒Php時間格式

SELECT AVG(TIME_TO_SEC(column_name)) FROM table_name)AS average_result 

在我的PHP我格式化的結果是這樣的:

<?php foreach($display_average as $da){ 
    echo date("H:i:s", ($da["average_result"])); 
} 
?> 

輸出:08:00:59而不是00:00:59,爲什麼這從08開始?或者我錯過了什麼?謝謝!

回答

1

看到php manul,有關date_default_timezone_set你的時區爲+8

默認PHP的date.timezone是UTC,U可以將其更改爲date.timezone = PRC

date_default_timezone_set('UTC'); 
echo date("H:i:s", 59);//00:00:59 

//date_default_timezone_set('RPC'); 
//echo date("H:i:s", 59);//08:00:59 
+0

其實我使用Codeigniter作爲我的框架,所以我應該如何做到這一點? – Kentot

+1

date_default_timezone_set('UTC'); //在你打電話之前date() – islq

+0

明白了吧!非常感謝 !我只是將它添加到我最外面的index.php文件中,以便在整個項目中全局可用。 – Kentot

2

兩個PHP的日期/時間函數和MySQL的日期/時間數據類型句柄掛鐘時間戳,而不是持續時間;即00:00:55表示午夜五十五秒。這不是你想要的;您無法處理持續時間超過23小時59分59秒,因爲您使用的數據類型和功能處理的時鐘時間不能超過這些值。

您的特定問題源於時區設置。你更大的問題是你需要存儲簡單的整數值表示經過的秒或分鐘;不是時間戳。要在PHP中將其格式化爲可讀取的字符串,您可以使用DateInterval class

0

總是去標準/正式的方法。但是,如果您需要定製它,那麼您可以通過編程完成幾乎所有的事情。在這裏,我們去

讓您的時間,人數從數據庫(在你的時間申請秒數)爲

SELECT 
AVG 
(
    HOUR(column_name) * 3600 
    + MINUTE(column_name) * 60 
    + SECOND(column_name) 
) AS numeric_average_result FROM table_name 

現在你可以秒數轉換爲正確的時間

foreach($display_average as $da) 
{ 
    $r = numToTime($da["numeric_average_result"]); 
    echo "<br>".$r; 
} 


function numToTime($num) 
{ 
    $seconds = $num%60; 
    $num = (int)($num/60); 
    $minutes = $num%60; 
    $hours = (int)($num/60); 
    return make2digit($hours).":".make2digit($minutes).":".make2digit($seconds); 
} 

function make2digit($val) 
{ 
    if(strlen($val) == 1) 
     return "0".$val; 
    else 
     return $val; 
}