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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:52:47