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

PHP中如何反向计算两个指定时间的时间间隔?

计算跨天反向时间间隔(PHP)

你的代码问题

直接用date()返回的字符串做减法是完全错误的——字符串无法直接进行数值运算,会导致非预期结果。另外strtotime()解析单独时间时默认指向当天,所以21:00减02:00得到的是当天19小时的差值,和你要的跨天反向间隔完全不符。

正确实现思路

要计算21:00到次日02:00的间隔,核心是判断两个时间的先后:如果目标时间(凌晨2点)早于起始时间(晚上9点),就把目标时间往后推一天,再计算差值。

方案一:用时间戳实现

// 定义时间(注意用字符串格式)
$time1 = '02:00';
$time2 = '21:00';

// 转换为当天的时间戳
$timestamp1 = strtotime($time1);
$timestamp2 = strtotime($time2);

// 若time1在time2之前,说明是次日的时间,加一天的秒数
if ($timestamp1 < $timestamp2) {
    $timestamp1 += 86400; // 1天=24*60*60=86400秒
}

// 计算小时差
$diffHours = ($timestamp1 - $timestamp2) / 3600;

echo $diffHours; // 输出5

方案二:用DateTime类(更直观)

PHP的DateTime类处理时间更灵活,可读性更强:

$time1 = new DateTime('02:00');
$time2 = new DateTime('21:00');

// 若time1早于time2,将其延后一天
if ($time1 < $time2) {
    $time1->modify('+1 day');
}

// 计算时间差
$interval = $time1->diff($time2);
echo $interval->h; // 输出5

补充说明

  • 两种方案的核心逻辑一致:判断时间先后,跨天则补一天时长再计算差值。
  • DateTime类的diff()方法会返回DateInterval对象,除了小时h,还能获取分钟i、秒s等更细粒度的单位,适合复杂时间计算场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:04:59