Php时间格式

时间:2015-05-14 07:37:47

标签: php mysql

我这里有一个获取列平均值的mysql查询(列数据类型为' time')。例如,列值为: 00:00:55,00:00:59,00:01:03

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开始?还是我错过了什么?谢谢!

3 个答案:

答案 0 :(得分:2)

PHP的日期/时间函数和MySQL的日期/时间数据类型都处理挂钟时间戳,而不是持续时间;即00:00:55表示午夜过了五十五秒。这不是你想要的;您无法处理超过23小时59分59秒的持续时间,因为您使用的数据类型和功能正在处理时钟时间,不能超过这些值。

您的具体问题源于时区设置。更大的问题是您需要存储表示经过的秒数或分钟数的简单整数值;不是时间戳。要在PHP中将其格式化为人类可读的字符串,您可以使用DateInterval class

答案 1 :(得分:0)

请参阅php manul,关于date_default_timezone_set您的时区是+8

PHP的默认date.timezone是utc,你可以将其更改为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

答案 2 :(得分: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;
}