PHP实现两时间区间内45/75分钟间隔时间戳输出方案问询
解决方案:生成指定时间区间内间隔45/75分钟的时间戳数组
首先,你现有代码里的while循环条件写反了——$e < $m永远不会成立,因为8am的时间戳肯定小于5pm的,所以循环根本不会执行。我们可以用更清晰、简便的方式来生成这些时间戳:
方法一:使用DateTime类(推荐)
DateTime类处理时间更安全可靠,尤其是涉及跨天、时区转换的场景,代码可读性也更高:
// 定义起始和结束时间 $start = new DateTime('8 am'); $end = new DateTime('5 pm'); // 初始化两个数组存储对应间隔的时间戳 $timestamps45 = []; $timestamps75 = []; // 生成45分钟间隔的时间戳 $current = clone $start; while ($current <= $end) { $timestamps45[] = $current->getTimestamp(); $current->add(new DateInterval('PT45M')); // 每次增加45分钟 } // 生成75分钟间隔的时间戳 $current = clone $start; while ($current <= $end) { $timestamps75[] = $current->getTimestamp(); $current->add(new DateInterval('PT75M')); // 每次增加75分钟 } // 如果需要合并两个数组并去重(部分时间点会同时满足两种间隔) $allTimestamps = array_merge($timestamps45, $timestamps75); $allTimestamps = array_unique($allTimestamps); sort($allTimestamps); // 按时间顺序排序 // 输出结果 var_dump($timestamps45, $timestamps75, $allTimestamps);
方法二:使用strtotime函数(更简洁)
如果习惯用原生时间戳操作,也可以用更简洁的for循环实现:
$start = strtotime('8 am'); $end = strtotime('5 pm'); $timestamps45 = []; // 从起始时间开始,每次累加45分钟的秒数(45*60) for ($time = $start; $time <= $end; $time += 45 * 60) { $timestamps45[] = $time; } $timestamps75 = []; // 同理累加75分钟的秒数 for ($time = $start; $time <= $end; $time += 75 * 60) { $timestamps75[] = $time; } // 合并去重并排序 $allTimestamps = array_unique(array_merge($timestamps45, $timestamps75)); sort($allTimestamps); var_dump($timestamps45, $timestamps75, $allTimestamps);
关键注意点
- 核心逻辑都是从起始时间出发,每次累加指定间隔的秒数,直到时间超过结束点为止
- 使用DateTime时一定要用
clone复制起始时间对象,否则修改$current会直接改变原始的$start对象 - 合并数组时记得用
array_unique去重,比如8am加上3小时(180分钟)的11am,既是45分钟间隔的第4个节点,也是75分钟间隔的第2个节点,会重复出现
内容的提问来源于stack exchange,提问作者user14289833
相关产品推荐
相关产品推荐

