如何将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
相关产品推荐
相关产品推荐

