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

