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

PHP如何计算CSV电子表格中比赛起止时间的分钟差值

问题原因

  • 你从CSV中读取到的开始、结束时间都是字符串类型,PHP直接对字符串做算术运算时会自动截取开头的数字部分进行计算,比如10:45会被识别为数字10,最终结果自然不符合预期
  • 现有代码逻辑存在两个错误:一是运算用了加法而非你需要的减法,二是差值计算逻辑写在了循环外,只会计算CSV最后一行数据的时间差

修复方案

核心是用PHP内置的strtotime()函数将时间字符串转为Unix时间戳(单位为秒),两个时间戳的差值除以60即可得到分钟级差值,修正后的代码如下:

<?php
const Start = 2;
const Finish = 3;

if (($handle = fopen("racing.csv", "r")) !== FALSE) {
    // 如果CSV第一行是表头,取消下面一行的注释跳过表头
    // fgetcsv($handle, 1000, ",");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $startTimeStr = $data[Start];
        $endTimeStr = $data[Finish];
        // 转换为时间戳
        $startTimestamp = strtotime($startTimeStr);
        $endTimestamp = strtotime($endTimeStr);
        // 计算分钟差,新增跨天场景兼容
        $diffSeconds = $endTimestamp - $startTimestamp;
        if ($diffSeconds < 0) {
            // 当日23点到次日1点这类跨天场景的兼容处理
            $diffSeconds += 86400;
        }
        $diffMinutes = round($diffSeconds / 60);
        echo "差值 ".$startTimeStr." - ".$endTimeStr." = ".$diffMinutes."分钟\n";
    }
    fclose($handle);
}
?>

如果你的时间格式比较特殊strtotime()识别失败,可以用DateTime类指定格式解析更稳妥,示例如下:

// 示例为H:i格式的时间,比如10:45,如果你是其他格式可以自行修改第一个参数的格式规则
$startObj = DateTime::createFromFormat('H:i', $startTimeStr);
$endObj = DateTime::createFromFormat('H:i', $endTimeStr);
$diff = $startObj->diff($endObj);
$diffMinutes = $diff->h * 60 + $diff->i;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:57:03