You need to enable JavaScript to run this app. Laravel计算与上一条日志created_at时间差时如何正确实现分钟取整
优惠活动
大模型
产品
解决方案
定价
更多

Laravel计算与上一条日志created_at时间差时如何正确实现分钟取整

问题偏差根因

之前取整结果不符合预期的核心是取整操作的时机错位:

  • 原始计算流程是:秒级时间差换算为小时单位 → 减去小时单位的喂养间隔 → 对小时维度的差值做小数取整 → 乘以60换算为分钟
  • 这种流程下,小时维度的取整粒度最低是6分钟(若保留1位小数,0.1小时=6分钟),比如实际计算得到的10.2分钟差值,对应的小时值是0.17小时,在小时维度取1位小数就会被进位为0.2小时,换算后就是12分钟,完全偏离“最终分钟取整为整数”的目标
正确修正方案

将取整操作挪到所有单位换算完成、得到最终分钟级数值之后执行,保证取整粒度和需求的分钟级匹配。
对应的feed类型分支修改后代码:

if($type == 'feed'){
    // 1. 完成基础计算,全程不在中间环节做取整
    // $diffTime 此时已经是换算为小时单位的原始时间差
    $diffHour = $diffTime - $baby->feedingInterval;
    $diffMinuteFloat = $diffHour * 60; // 得到浮点型的分钟差值
    
    // 2. 在分钟维度做整数取整
    // 适配“10.2m转10m”的需求,使用round四舍五入;若需直接舍去小数保留整数可用floor()
    $diffMinute = (int)round($diffMinuteFloat, 0);
    
    // 3. 拼接正负标识和显示格式
    $logDetailStatus = ($diffMinute > 0) ? "+" : "-";
    $diffTime = $logDetailStatus . abs($diffMinute) . "m ";
}

额外优化提示:原代码用str_replace('-', '', $diffTime)处理负号的方式有隐患,替换过程会误改数值本身的内容,后续扩展到小时级差值时可能出现异常,用abs()直接取数值绝对值的方式更稳定。

内容的提问来源于stack exchange,提问作者code-8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 13:54:07