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

PHP(WordPress)中如何计算两个strtotime时间的HH:MM:SS格式差值

问题分析

你遇到的核心问题有两个:

  1. 时间差计算错误:gmdate('H:i:s', $diff) 中的H仅能表示0-23的小时数,当时间差超过24小时时会自动对24取模,导致结果被截断(比如46小时30分会被显示为22:30:00)。
  2. 数据库插入存在风险且语法错误:直接拼接变量会引发SQL注入,同时字符串类型的$time未加引号会导致SQL语法报错。
正确实现方案

1. 正确计算跨天时间差(HH:MM:SS格式)

方法一:手动计算总小时数

通过总秒数差值拆分出小时、分钟、秒,避免小时数被截断:

// 拼接完整目标时间字符串(用24小时制避免AM/PM解析歧义)
$target_str = $quiz_date . ' 20:30:00';
$target_time = strtotime($target_str);
$submitted_time = strtotime('now');

// 计算总秒数差值
$diff_seconds = $submitted_time - $target_time;

// 拆分小时、分钟、秒
$hours = floor($diff_seconds / 3600);
$remaining_seconds = $diff_seconds % 3600;
$minutes = floor($remaining_seconds / 60);
$seconds = $remaining_seconds % 60;

// 格式化为支持跨天的HH:MM:SS
$time = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);

方法二:使用DateTime类(推荐,更可靠)

利用DateTime的diff()方法获取时间间隔对象,直接计算总小时数:

// 创建目标时间对象
$target_time = DateTime::createFromFormat('Y-m-d H:i:s', $quiz_date . ' 20:30:00');
$submitted_time = new DateTime(); // 当前时间

// 计算时间间隔
$interval = $submitted_time->diff($target_time);

// 计算总小时数:天数*24 + 剩余小时
$total_hours = $interval->days * 24 + $interval->h;

// 格式化结果
$time = sprintf('%02d:%02d:%02d', $total_hours, $interval->i, $interval->s);

2. 安全插入MySQL数据库

在WordPress项目中,必须使用wpdb类处理数据库操作,彻底避免SQL注入:

global $wpdb;
// 拼接带前缀的表名(WordPress默认前缀为wp_)
$table_name = $wpdb->prefix . 'Results';

// 使用wpdb内置方法插入数据
$wpdb->insert(
    $table_name,
    array(
        'user_id' => $user_id,
        'Time' => $time
    ),
    array(
        '%d', // user_id为数字类型
        '%s' // Time为字符串类型,若数据库字段为TIME类型也适用
    )
);

若需执行原生SQL,必须用wpdb->prepare做参数绑定:

global $wpdb;
$query = $wpdb->prepare(
    "INSERT INTO {$wpdb->prefix}Results (user_id, Time) VALUES (%d, %s);",
    $user_id,
    $time
);
$wpdb->query($query);

数据库字段建议

如果Time字段存储的是时间间隔,建议设置为TIME类型(MySQL支持范围为-838:59:59到838:59:59,足够覆盖绝大多数场景);若需存储更长间隔,也可以用INT存储总秒数,读取时再格式化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:35