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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:41:26