mysql将十进制时间转换为xx:xx格式

1 php mysql time decimal

我试图将小数时间转换为小时和分钟的实际时间格式,即:在xx:xx小时.

我的查询是:

select SUM(vt.vluchtdec) AS vluchttijddecimal

from tbl_vluchtgegevens vg

left join tbl_vluchttijd vt
on vg.vluchttijddec = vt.vluchttijdID

WHERE vg.vertrekdatum <=NOW();
Run Code Online (Sandbox Code Playgroud)

我在呼应

. $row['vluchttijddecimal'] .
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个,但这仍然以十进制格式给出了我的回答:

$result = mysql_query("select SUM(vt.vluchtdec) AS vluchttijddecimal

from tbl_vluchtgegevens vg

left join tbl_vluchttijd vt
on vg.vluchttijddec = vt.vluchttijdID

WHERE vg.vertrekdatum <=NOW();");

while($row = mysql_fetch_array($result))
{
$dec = $row['vluchttijddecimal'];
function 
convertTime($dec)
{
// start by converting to seconds
$seconds = $dec * 3600;
// we're given hours, so let's get those the easy way
$hours = floor($dec);
// since we've "calculated" hours, let's remove them from the seconds variable
$seconds -= $hours * 3600;
// calculate minutes left
$minutes = floor($seconds / 60);
// remove those from seconds as well
$seconds -= $minutes * 60;
// return the time formatted HH:MM:SS
return lz($hours).":".lz($minutes).":".lz($seconds);
}

// lz = leading zero
function lz($num)
{
return (strlen($num) < 2) ? "0{$num}" : $num;
}

echo "" .$dec."";
Run Code Online (Sandbox Code Playgroud)

在MS Access中我会做这样的事情:

CInt([vluchttijddecimal]) & ":" & Format([vluchttijddecimal]*60 Mod 60;"00")
Run Code Online (Sandbox Code Playgroud)

但这不起作用,或者我不知道如何在MySQL/php中这样做.

ozf*_*ive 6

对于任何有兴趣的人......这就是你如何将十进制时间(其中 0.1 == 6 分钟)转换为小时和分钟(0.2333 == 14 分钟)单独在 MYSQL 中。不需要 PHP。这也说明需要将秒舍入到分钟。

SELECT CONCAT(FLOOR(timeInDec),':', LPAD(ROUND((timeInDec - FLOOR(timeInDec)) * 60) % 60,2,0)) AS TimeInHoursMinutes
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)

将 timeInDec 替换为包含要转换的十进制时间的列名。

这将为 0.1000 十进制值返回 0:06,因此前导零以个位数分钟计。


小智 5

您可以在SQL语句中执行以下操作:

SELECT CONCAT(CEIL(mydecimal),':', LPAD(Floor(mydecimal*60 % 60),2,'0')) as formated text
Run Code Online (Sandbox Code Playgroud)

其中mydecimal是未格式化的字段名称