PHP中如何计算两个时间的小时差?附示例代码
在PHP中计算两个时间的小时差
嘿,我来帮你搞定这个时间差计算的问题!首先看你的代码思路是对的——把时间转成时间戳再计算差值,但有几个细节可以优化,另外也可以用更现代的面向对象方式来实现,我给你详细拆解下:
核心思路
不管用哪种方法,本质都是把时间转换成统一的可计算格式(时间戳或DateTime对象),再计算差值并转换成小时。
方法一:基于时间戳(你的代码改进版)
你的代码已经用了strtotime()和time()来获取时间戳,这里需要注意两个关键点:
时区设置很重要
你注释里的UTC+6不是PHP推荐的时区标识符,建议用标准的时区名称(比如UTC+6对应的Asia/Dhaka),否则可能出现时间计算偏差。一定要在代码开头设置正确的时区:date_default_timezone_set('Asia/Dhaka');处理差值的格式
用($time1 - $time2)/3600得到的是浮点数(比如2.5小时),如果需要整数小时,可以根据需求用floor()(向下取整)、ceil()(向上取整)或round()(四舍五入)处理。
改进后的完整代码:
// 设置正确的时区 date_default_timezone_set('Asia/Dhaka'); $date1 = '2018-04-24 02:30:00'; $time1 = strtotime($date1); $time2 = time(); // 获取当前时间戳 // 计算小时差(浮点数,保留小数) $hourDiff = ($time2 - $time1) / 3600; // 按需转换为整数 $hourDiffFloor = floor($hourDiff); // 比如2.7小时 → 2小时 $hourDiffRound = round($hourDiff); // 2.7→3,2.3→2 echo "当前时间:" . date('Y-m-d H:i:s', $time2) . "<br>"; echo "小时差(精确到小数):{$hourDiff}<br>"; echo "向下取整的小时差:{$hourDiffFloor}<br>";
方法二:使用DateTime类(更推荐)
PHP的DateTime类是处理时间的更现代方式,它能自动处理时区、闰年、不同月份天数等边缘情况,代码可读性也更高:
date_default_timezone_set('Asia/Dhaka'); // 创建两个DateTime对象 $date1 = new DateTime('2018-04-24 02:30:00'); $date2 = new DateTime(); // 默认是当前时间 // 计算时间间隔 $interval = $date1->diff($date2); // 计算总小时数:天数×24 + 小时 + 分钟/60 + 秒/3600 $totalHours = $interval->days * 24 + $interval->h + $interval->i/60 + $interval->s/3600; // 如果只需要整数小时 $intHours = $interval->days * 24 + $interval->h; echo "时间间隔详情:{$interval->days}天 {$interval->h}小时 {$interval->i}分钟<br>"; echo "总小时差(精确到小数):{$totalHours}<br>"; echo "整数小时差:{$intHours}<br>";
几个注意事项
- 如果
$date1是未来时间,差值会是负数,你可以用abs()取绝对值:abs(($time1 - $time2)/3600) - 时区一定要提前设置,否则
time()、strtotime()和DateTime都会使用PHP默认时区,导致计算结果错误 - 如果你需要更精确的时间差(比如包含分钟、秒),保留浮点数即可;如果只需要整小时,按需取整
内容的提问来源于stack exchange,提问作者Tahmidur Rahman
相关产品推荐
相关产品推荐

