我正在尝试将小数时间转换为小时和分钟的实际时间格式,即: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();
我正在回应
. $row['vluchttijddecimal'] .
我也试过这个,但这仍然以十进制格式给出了我的回答:
$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."";
在MS Access中我会做这样的事情:
CInt([vluchttijddecimal]) & ":" & Format([vluchttijddecimal]*60 Mod 60;"00")
但这不起作用,或者我不知道如何在MySQL / php中这样做。
答案 0 :(得分:5)
您可以在SQL语句中执行以下操作:
SELECT CONCAT(CEIL(mydecimal),':', LPAD(Floor(mydecimal*60 % 60),2,'0')) as formated text
mydecimal是未格式化的字段名称
答案 1 :(得分:3)
对于任何有兴趣的人......这就是你如何将MYSQL中的十进制时间(其中0.1 == 6分钟)转换为小时和分钟(0.2333 == 14分钟)。不需要PHP。这也说明需要将秒数转换为几分钟。
SELECT CONCAT(FLOOR(timeInDec),':', LPAD(ROUND((timeInDec - FLOOR(timeInDec)) * 60) % 60,2,0)) AS TimeInHoursMinutes
FROM YourTable;
将timeInDec替换为包含您要转换的小数时间的列名。
对于0.1000十进制值,这将返回0:06,因此前导零以单位数分钟计算。
答案 2 :(得分:0)
我想我已经计算了你的时间价值......虽然这有点痛苦。
看来你的“十进制时间”是“hours.minutes”?相当可怕,绝对不是一个好的格式:处理时间最好坚持整数,指定总分钟/秒/小时或您需要的任何粒度。
但假设它是小时。分钟,你应该能够在PHP中这样做:
while($row = mysql_fetch_array($result))
{
$dec = $row['vluchttijddecimal'];
return sprintf("%2d:%2d", floor($dec), floor(($dec - floor($dec))*100));
}
答案 3 :(得分:0)
希望我认为你的意思是正确的,例如2.5小时= 2小时30分钟。如果是这样,那么您的'时间'是一个时间间隔,最好由DateInterval类表示。
此功能可以满足您的需求: -
/**
* Converts a 'decimal time' in the format 1.5hours to DateInterval object
*
* @param Int $decimalTime
* @return DateInterval
*/
function decTimeToInterval($decimalTime)
{
$hours = floor($decimalTime);
$decimalTime -= $hours;
$minutes = floor($decimalTime * 60);
$decimalTime -= ($minutes/60);
$seconds = floor($decimalTime * 3600);
$interval = new \DateInterval("PT{$hours}H{$minutes}M{$seconds}S");
return $interval;
}
echo decTimeToInterval(512.168)->format("%H:%I:%S");
如果您想以“H:i”格式添加时间而不将它们转换为小数,请执行以下操作: -
function sumTimes($time1, $time2)
{
list($hours1, $minutes1) = explode(':', $time1);
list($hours2, $minutes2) = explode(':', $time2);
$totalHours = $hours1 + $hours2;
$totalMinutes = $minutes1 + $minutes2;
if($totalMinutes >= 60){
$hoursInMins = floor($totalMinutes/60);
$totalHours += $hoursInMins;
$totalMinutes -= ($hoursInMins * 60);
}
return "$totalHours:$totalMinutes";
}
echo sumTimes('12:54', '100:06') . PHP_EOL;
echo sumTimes('12:54', '100:20') . PHP_EOL;
答案 4 :(得分:0)
这是我用于薪资系统的内容:
SELECT If(total_late>0, LPAD(CONCAT(REPLACE(FLOOR(total_late/60) + FORMAT(total_late%60*0.01,2), '.', ':'), ':00'), 8, 0), '00:00:00') FROM MyTable
我将其乘以0.01,因为我的变量以秒为单位。例如。 60.00 = 1分钟