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

Laravel 计算API返回的两个日期的时分秒差值求助

问题原因排查

  • 语法错误:$startTime = strtotime($job['startTime']) 行末尾缺少分号,直接触发PHP语法报错,是代码无法运行的核心原因之一。
  • 变量未初始化:$startTime 和 $endTime 分别在两个互斥的if分支中定义,没有提前初始化。如果循环时先匹配到endTime对应的name值,会直接抛出$startTime 未定义的警告,且如果两类任务数据的顺序不符合预期,变量取值会出现错乱。
  • 差值计算逻辑不符合需求:原有代码直接将秒级差值除以3600,只能得到小时单位的结果,无法分别输出时、分、秒三个维度的数值。

修复后代码

@php
// 提前初始化时间变量,避免未定义报错
$startTime = null;
$endTime = null;
@endphp

@foreach ($data['statuses'] as $job) 
    @if ($job['name'] == "************")
        @php
            // 补充分号,使用指定格式解析时间,兼容性更强
            $startTime = DateTime::createFromFormat('YmdHis', $job['startTime'])->getTimestamp();
        @endphp
    @elseif ($job['name'] == "***********")
        @php
            $endTime = DateTime::createFromFormat('YmdHis', $job['endTime'])->getTimestamp();
        @endphp

        @if ($startTime && $endTime)
            @php
                $diffSeconds = $endTime - $startTime;
                // 拆分秒级差值为时分秒
                $hours = floor($diffSeconds / 3600);
                $minutes = floor(($diffSeconds % 3600) / 60);
                $seconds = $diffSeconds % 60;
            @endphp
            时间差:{{ $hours }}小时 {{ $minutes }}分钟 {{ $seconds }}秒
        @endif
    @endif
@endforeach

如果确认运行环境的strtotime对YmdHis格式的解析稳定,也可以保留原有strtotime写法,只需补全对应位置的分号即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:48:01