PHP实现时间按指定间隔(15/30分钟)向上/向下取整需求
PHP 时间按指定间隔和方向取整(考勤系统适用)
针对你需要的考勤场景,这里提供一个通用的时间取整函数,支持自定义15/30分钟间隔,以及向上/向下取整的方向选择:
function roundTimeCustom($time, $interval = 15, $direction = 'floor') { // 将时间统一转为时间戳(如果传入的是字符串格式) if (is_string($time)) { $time = strtotime($time); } // 转换间隔为秒数 $intervalSeconds = $interval * 60; // 校验取整方向,非法值默认向下取整 $direction = in_array($direction, ['floor', 'ceil']) ? $direction : 'floor'; // 根据方向计算取整后的秒数 if ($direction === 'ceil') { $roundedSeconds = ceil($time / $intervalSeconds) * $intervalSeconds; } else { $roundedSeconds = floor($time / $intervalSeconds) * $intervalSeconds; } // 返回格式化的时间字符串 return date('H:i', $roundedSeconds); }
参数说明
$time:可以是时间戳,也可以是如'14:05'的时间字符串$interval:取整的分钟间隔,支持15或30(可扩展其他数值)$direction:取整方向,'floor'为向下取整,'ceil'为向上取整,默认是'floor'
场景示例
- 14:05向上取整到最近15分钟:
echo roundTimeCustom('14:05', 15, 'ceil'); // 输出 14:15
- 14:05向上取整到最近30分钟:
echo roundTimeCustom('14:05', 30, 'ceil'); // 输出 14:30
- 考勤结算:14:26下班,向下取整15分钟(满15分钟才计入):
echo roundTimeCustom('14:26', 15, 'floor'); // 输出 14:15
- 刚好落在间隔点的时间,无论方向都返回原时间:
echo roundTimeCustom('14:30', 15, 'ceil'); // 输出 14:30 echo roundTimeCustom('14:30', 30, 'floor'); // 输出 14:30
内容的提问来源于stack exchange,提问作者cornacum
相关产品推荐
相关产品推荐

