给定一个十进制时间值,我怎么能将它舍入到一个区间?

时间:2012-01-26 21:45:42

标签: php time decimal

例如,给定小数值5.66,表示5小时39分钟,我如何将此数字舍入为5小时45分钟(最近的15分钟间隔),即5.75。

同样地,如果我有5小时36分钟或5.6分钟,这比5:45更接近5:30,所以我想要从中获得5.5分。

尝试用PHP编写。

function round_decimal_time($time, $interval=15){
  // Split up decimal time
  $hours = (int) $time;
  $minutes = $time - $hours;

  // Convert base 10 minutes to base 60 minutes
  $b60_m = $minutes * 60;

  // Round base 60 minutes to nearest interval... (15 minutes by default)
  // DONT KNOW HOW TO DO THIS PART

  // If greater than or equal to 60, go up an hour
  if($b60_m >= 60){
      $hours += 1;
      $minutes = 0;
  } else {
    // Otherwise, convert b60 minutes back into b10
    $time = $hours + ($b60_m / 60);
  }

  return $time;
}

再一次,我试图做的一些例子。

Input: 5.66 (5:39 duration)
Output: 5.75

Input: 5.6 (5:36 duration)
Output: 5.50

Input: 5.05 (5:03 duration)
Output: 5.00

3 个答案:

答案 0 :(得分:3)

舍入到'nearest number $X'由:

完成
 round($number/$X)*$X;

所以,在(0.66 * 60 = 39.6)之后:

 round(39.6/15)*15=45

如果您想要向下或向上舍入,可以以类似的方式使用ceilfloor

你的总功能是:

 round_decimal_time($time,$round=15){
     return (round($time * 60 / $round) * $round) / 60;
 }

答案 1 :(得分:1)

$a = 5.66;
var_dump(round($a / 0.25) * 0.25);

任何四舍五入都是如此。

例如:如果您有7并且想要舍入到最接近的数字(5,10,15,20等),您可以这样做:

round(7 / 5) * 5

答案 2 :(得分:0)

要将任何内容四舍五入到最近的x,除以x,舍入到最接近的整数,然后乘以x