You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'

场景示例

  1. 14:05向上取整到最近15分钟:
echo roundTimeCustom('14:05', 15, 'ceil'); // 输出 14:15
  1. 14:05向上取整到最近30分钟:
echo roundTimeCustom('14:05', 30, 'ceil'); // 输出 14:30
  1. 考勤结算:14:26下班,向下取整15分钟(满15分钟才计入):
echo roundTimeCustom('14:26', 15, 'floor'); // 输出 14:15
  1. 刚好落在间隔点的时间,无论方向都返回原时间:
echo roundTimeCustom('14:30', 15, 'ceil'); // 输出 14:30
echo roundTimeCustom('14:30', 30, 'floor'); // 输出 14:30

内容的提问来源于stack exchange,提问作者cornacum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:40:02