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

如何将MySQL时间格式转换为小时/分钟格式?

解决MySQL时间格式转成"XXhXXmin"的PHP自定义实现

嘿,这个需求其实挺常见的,PHP自带的时间格式化函数确实没法直接一步到位,但咱们自己写个小逻辑就能轻松搞定。我给你两种靠谱的实现方式,你可以根据自己的习惯选:

方法1:用DateTime类实现(推荐,健壮性更强)

这种方式利用PHP的DateTime类来解析时间,处理起来更规范,哪怕以后需求扩展(比如加入日期部分)也能轻松兼容:

$mysqlTime = '07:22:46.5714';

// 解析带毫秒的时间格式
$dateTime = DateTime::createFromFormat('H:i:s.u', $mysqlTime);

// 计算当前时间的总秒数,转成分钟后四舍五入
$totalMinutes = round($dateTime->format('H') * 3600 + $dateTime->format('i') * 60 + $dateTime->format('s.u')) / 60;

// 拆分小时和分钟,处理可能的进位(比如59分59秒会变成60分,即1小时)
$hours = floor($totalMinutes / 60);
$minutes = $totalMinutes % 60;

// 格式化为目标样式,确保两位数显示
$result = sprintf('%02dh%02dmin', $hours, $minutes);

echo $result; // 输出:07h23min

代码说明:

  • createFromFormat('H:i:s.u', $mysqlTime):专门匹配你的输入格式(小时:分钟:秒.毫秒)
  • 计算总秒数时把小时、分钟、秒(含毫秒)都转成秒数相加,再转成分钟后四舍五入,保证精度
  • sprintf('%02d'):确保小时和分钟都是两位数字,比如9小时5分会显示成09h05min

方法2:直接字符串拆分计算(轻量高效)

如果你的输入格式固定不变,这种方式更直接,不需要依赖DateTime类:

$mysqlTime = '07:22:46.5714';

// 拆分时间的小时、分钟、秒(含毫秒)部分
list($hours, $minutes, $seconds) = explode(':', $mysqlTime);

// 把秒数转成小数,计算总分钟数(分钟 + 秒/60)
$totalMinutes = (float)$minutes + (float)$seconds / 60;

// 四舍五入到整数分钟
$roundedMinutes = round($totalMinutes);

// 处理分钟进位的情况(比如60分钟=1小时)
if ($roundedMinutes >= 60) {
    $hours++;
    $roundedMinutes -= 60;
}

// 格式化输出
$result = sprintf('%02dh%02dmin', $hours, $roundedMinutes);

echo $result; // 输出:07h23min

代码说明:

  • explode(':', $mysqlTime):直接按冒号拆分时间字符串,得到三个部分
  • 计算总分钟数时把秒数转换成分钟的小数部分,加上原有分钟数后四舍五入
  • 额外判断分钟是否超过60,处理进位逻辑,避免出现07h60min这种不规范的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:36:45