Laravel中PHP计算时长总和与Google结果不一致:正确性判断与修正
问题分析与解决方案
首先我们先明确核心的时长计算逻辑:
两个7:55(7小时55分钟)的总和是15小时50分钟,这是客观正确的结果。
各个结果的差异原因
- 你的Laravel代码输出的
15.50:是把总时长的小时和分钟用小数点拼接成字符串(格式为hh.mm),本质是对15h50m的一种格式化展示,和Excel/Google Sheets的结果一致,这是符合实际时长的正确展示方式。 - Google显示的
15.1:这大概率是格式误解导致的错误结果——要么是你在Google工具中错误输入了7.55 + 7.55(把冒号当成小数点,将7:55误认为7.55小时),要么是该工具错误地将7:55解析为小数形式的小时(7.55小时),此时两个7.55小时相加自然得到15.1小时。但这个结果和实际的时长总和不符。
如何修改代码匹配Google的15.1结果
如果你的需求确实是要模拟这个“将时间冒号视为小数点”的计算逻辑,可以修改代码如下:
$times[] = '7:55'; $times[] = '7:55'; $totalHours = 0; foreach ($times as $time) { // 将冒号替换为小数点,转换成小数小时 $decimalHour = (float)str_replace(':', '.', $time); $totalHours += $decimalHour; } // 输出保留一位小数,得到15.1 $tally = number_format($totalHours, 1); dd($times, $tally);
但必须强调:这个结果是不符合实际时长计算逻辑的,只是为了匹配Google的错误解析结果。如果你的目标是计算真实的时长总和,那么你原来的代码(或转换成正确的小数小时)才是正确的,比如要得到真实的小数形式时长(15小时50分≈15.83小时),可以修改代码:
$times[] = '7:55'; $times[] = '7:55'; $minutes = 0; foreach ($times as $time) { list($hour, $minute) = explode(':', $time); $minutes += $hour * 60; $minutes += $minute; } // 转换成小数形式的小时 $totalHours = $minutes / 60; // 可以按需求保留小数位数,比如两位:15.83 $tally = number_format($totalHours, 2); dd($times, $tally);
内容的提问来源于stack exchange,提问作者blacktorotot
相关产品推荐
相关产品推荐

