我将持续时间值存储在数据库中,以了解在给定的工作周内我必须做多少事情。例如,我有以下输入,根据总持续时间、减少的持续时间(例如午餐时间、会议、如厕时间等)和减少的百分比来计算我一周的容量持续时间。例如,我有以下值:
$total_duration = 30:30:00; //(37 hours 30 mins 00 secs)
$reduced_duration = 01:00:00; //(1 hour 00 mins 00 secs)
$capacity_percentage = 90%; // capacity percentage for leeway
因此,我想做的是从$reduced_duration
减去$total_duration
,然后得到这个总数的$capacity_percentage
%。
我正在尝试以下内容;
$total_duration = '30:30:00'; //(37 hours 30 mins 00 secs)
$reduced_duration= '01:00:00'; //(1 hour 00 mins 00 secs)
$capacity_percentage ='90%'; // capacity percentage for leeway
$total_duration_hrs = 0;
$total_duration_mins = 0;
$total_duration_secs = 0;
$reduced_duration_hrs = 0;
$reduced_duration_mins = 0;
$reduced_duration_secs = 0;
list($total_duration_hours, $total_duration_minutes, $total_duration_minutes) = explode(':', $total_duration);
list($reduced_duration_hours, $reduced_duration_minutes, $reduced_duration_seconds) = explode(':', $reduced_duration);
$total_duration_hrs += (int) $total_duration_hours;
$total_duration_mins += (int) $total_duration_minutes;
$total_duration_secs += (int) $total_duration_minutes;
$reduced_duration_hrs += (int) $reduced_duration_hours;
$reduced_duration_mins += (int) $reduced_duration_minutes;
$reduced_duration_secs += (int) $reduced_duration_seconds;
$totalhrs = ($total_duration_hrs - $reduced_duration_hrs);
$totalmins = ($total_duration_mins - $reduced_duration_mins);
$totalsecs = ($total_duration_secs - $reduced_duration_secs);
这给了我正确的总时间,即29:30:30
。但现在我有点不确定如何找到时间百分比值,我会找到90%的小时、分钟和秒,还是会做其他事情?有什么想法吗?
如果您在几秒钟内完成所有操作,并且只在您想要输出或读取值时将其转换为小时、分钟、秒,则会更容易。这样,您的逻辑就变得更简单,对状态的依赖性也更低。
编写一个函数,将秒转换为小时:分钟:秒
function secondsToFormat($seconds) {
$diff = (new DateTime)->sub(new DateInterval("PT{$seconds}S"))->diff(new DateTime);
$h = $diff->format("%h") + $diff->format("%a") * 24;
return $diff->format("{$h}:%I:%S");
}
编写一个将小时:分钟:秒转换为秒的函数
现在你需要一个做相反事情的函数,这样你就可以很容易地在两者之间转换。
function formatToSeconds($formattedTimeString) {
list($hours, $minutes, $seconds) = explode(":", $formattedTimeString);
$seconds += $hours * 60 * 60;
$seconds += $minutes * 60;
return $seconds;
}
编写一个函数来计算总额的百分比
function getPercentage($total, $percent) {
return (int) floor($total / 100 * $percent);
}
现在你可以简单地这样做。。。
$t = formatToSeconds($total_duration);
$r = formatToSeconds($reduced_duration);
$diff = $t - $r; // difference in seconds
echo secondsToFormat(getPercentage($diff, 90)), " at 90% capacity";
你会得到类似26:33:00 at 90% capacity
的东西