时间日期 · 倒计时 / 计时

时间加减

hh:mm:ss 加减/时长合计

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 62 次使用
hh:mm:ss 加减 · 时长合计 · 日期间隔 · 秒换算
起点时间 start time · hh:mm:ss
运算
各时长 each as hh:mm:ss · 选 +/− 累加
起始 from
结束 to
时长 hh:mm:ss
总秒数 total seconds
结果
就绪 · 选择模式并输入即可实时计算
第一节

关于本工具

About

录完一段两小时的播客,发现中间补录了三次,算总时长时容易把 hh:mm:ss 加错。这个工具把时间加减和合计收进一个输入框,按行粘贴或手动输入 12:34:56 这种格式,自动对齐进位,结果精确到秒。所有运算在浏览器里完成,时间数据不会离开本地——适合剪辑师核对素材时长、排班算工时、或者单纯想确认“3 小时 17 分 22 秒减去 45 分 8 秒”等于多少的人。

使用场景

直播时长对账

主播播了 3 场,第一场 2:15:30,第二场 1:48:20,第三场 0:52:45。结算时按总时长算补贴,手动加和容易进位错。把三段时间逐行输入本工具,直接得到合计 4:56:35,和平台后台数据核对无出入,避免因计算误差少拿几百块补贴。

运动课表排期

教练安排一周 5 次训练,每次时长不同:周一 0:45:00、周三 1:15:00、周五 1:30:00、周六 0:50:00、周日 0:30:00。想算这周总运动时长是否达标(目标 5 小时)。用本工具累加得到 4:50:00,还差 10 分钟,决定周六加一组 15 分钟 HIIT 凑满。

会议超时追责

周例会原定 1 小时,实际开了 1:45:30。老板让行政统计本月 4 次会都超了多久:第一次超 0:12:15,第二次超 0:08:40,第三次超 0:25:10,第四次超 0:15:25。用工具合计超时 1:01:30,等于多开了 1 小时会,数据贴到周报里推动议程改革。

考勤补签计算

员工一个月迟到 3 次:8:12:30(晚到 12 分 30 秒)、8:05:15(晚到 5 分 15 秒)、8:20:10(晚到 20 分 10 秒)。HR 需按累计迟到时长扣绩效。手动加 12:30 + 5:15 + 20:10 = 37:55,用本工具输入三个时间差直接出结果,避免手算进位错误导致扣薪纠纷。

音视频剪辑时长

剪辑师合并 4 段素材:A 段 0:03:45、B 段 0:05:20、C 段 0:02:10、D 段 0:04:35。客户要求成片不超过 15 分钟。用工具合计 0:15:50,超了 50 秒,于是把 C 段剪掉 1 分钟(变成 0:01:10),重新加总得到 0:14:50,符合要求。

对比矩阵

维度本工具在线计算器手工计算
隐私纯浏览器计算,数据不上传部分工具需提交至服务器完全离线,无数据泄露风险
速度输入即出,无网络延迟依赖网络响应,高峰期可能卡顿需手动逐位计算,耗时较长
批量处理支持多条时间表达式一次性输入并合计多数仅支持单条加减需逐条计算再手动汇总
格式容错自动识别 hh:mm:ss / mm:ss / 纯秒数常要求严格 hh:mm:ss 格式需自行转换统一格式
负值处理正确显示负时间(如 -01:30:00)部分工具报错或返回空需人工标记负号并调整借位
第二节

使用指南

Getting Started

使用步骤

  1. 1在「时间1」输入框填写起始时间(格式 hh:mm:ss,如 01:30:00),下方实时显示该时间的数值校验状态
  2. 2选择运算类型:点「加」或「减」按钮,按钮高亮表示当前选中
  3. 3在「时间2」输入框填写要加减的时长(格式 hh:mm:ss,如 00:45:00),输入合法后结果区自动更新
  4. 4结果区显示最终时间(hh:mm:ss),若结果为负则显示「-」前缀;点结果右侧复制图标,数值即写入剪贴板
  5. 5如需连续运算,直接修改任一输入框或切换加减按钮,结果区同步刷新,无需重复点击计算按钮

输入输出示例

输入输出说明
01:30:45 + 02:15:2003:46:05常规:两个普通时长相加,验证秒和分的进位(45+20=65秒→1分5秒,30+15+1=46分)
00:00:00 + 05:30:0005:30:00边界:零值加正数,验证零作为加数时结果正确,不出现空串或 NaN
23:59:59 + 00:00:0124:00:00边界:秒进位到天,验证 23:59:59 + 1秒 是否正确处理为 24:00:00(而非 00:00:00 或报错)
10:00:00 - 12:30:00-02:30:00易错:结果为负,验证工具是否支持负号输出,以及负号与时长格式的拼接
99:99:99 + 00:00:01无效输入易错:输入秒/分超过59(99:99:99),验证工具是否做格式校验并给出明确提示,而非静默截断
01:00:00 + 02:00:00 + 03:00:0006:00:00常规:三个时长连加,验证工具是否支持多个操作数(而非仅二元运算)
00:00:01 - 00:00:02-00:00:01边界:最小负差值(-1秒),验证负号前是否补零(-00:00:01 而非 -0:0:1)

常见错误对照

1.负值时长用减号时未括起负号

✗ 错误输入 -1:30:00 + 02:00:00
✓ 修复(-1:30:00) + 02:00:00

减号与运算符冲突,解析器可能将 -1:30:00 理解为「减 1:30:00」而非「负 1:30:00」。用括号显式标记负值可消除歧义。

2.时长合计时混用正负号导致结果异常

✗ 错误合计 01:00:00 + (-02:00:00) + 03:00:00
✓ 修复先统一符号:正数放一组、负数放一组,或按业务逻辑分步计算

工具按代数求和,正负混用结果可能是负时长或零,但用户期望的「总工时」通常只计正值。应先筛选再合计。

3.输入超过 23:59:59 的时长当作时间

✗ 错误输入 25:00:00 表示 25 小时
✓ 修复输入 25:00:00 即可(工具支持任意大小时长)

时间格式 hh:mm:ss 中 hh 通常 ≤23,但本工具接受任意非负整数作为时长。用户常误以为「25 小时」需拆成 1 天 1 小时。

4.秒数超过 59 未进位

✗ 错误输入 01:30:75 表示 1 分 30 秒加 75 秒
✓ 修复输入 01:31:15(工具自动进位)

hh:mm:ss 的 mm 和 ss 范围是 00-59,但用户可能直接输入 75 秒。工具会按 60 进制自动进位,但输入本身应合法。

5.用冒号分隔时误用全角符号

✗ 错误输入 01:30:00(全角冒号)
✓ 修复输入 01:30:00(半角冒号)

全角冒号(U+FF1A)与半角(U+003A)在解析时不同,工具只识别半角。全角输入会导致格式错误或解析失败。

6.加减运算中省略加号导致连写

✗ 错误输入 01:00:00 02:00:00(空格分隔)
✓ 修复输入 01:00:00 + 02:00:00

工具要求显式运算符,空格分隔会被视为无效表达式。用户习惯「连写」但工具需明确运算关系。

7.结果超过 24 小时误以为会显示天数

✗ 错误输入 12:00:00 + 18:00:00,期望显示 1 天 6 小时
✓ 修复工具输出 30:00:00(纯小时格式)

本工具结果始终以 hh:mm:ss 格式展示,不拆分天。用户若需天级显示,应自行除以 24。

8.秒数带小数未处理

✗ 错误输入 01:30:30.5
✓ 修复输入 01:30:30(工具不支持小数秒)

工具只接受整数秒。小数秒会被截断或解析失败,需先四舍五入或取整。

第三节

工作原理

How It Works

核心公式

T = (H1 + H2) : (M1 + M2 + carry) : (S1 + S2 + carry) (60 进制)

变量说明

  • H1, M1, S1第一个时间的时、分、秒
  • H2, M2, S2第二个时间的时、分、秒
  • carry秒/分满 60 向高位进位

示例

计算 2:45:30 + 1:35:50:秒 30+50=80 → 80-60=20 秒,进位 1 分;分 45+35+1=81 → 81-60=21 分,进位 1 时;时 2+1+1=4;结果 4:21:20。

时间加减 · 纯浏览器端计算流程输入时间hh:mm:ss解析与校验拆分为时/分/秒本地运算加减 / 合计输出结果hh:mm:ss数据不上传服务器
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

from datetime import timedelta def add_time(time_str: str, delta_str: str) -> str: """hh:mm:ss 格式加减,支持负号""" def parse(s: str) -> timedelta: sign = 1 if s.startswith('-'): sign = -1 s = s[1:] parts = list(map(int, s.split(':'))) return sign * timedelta(hours=parts[0], minutes=parts[1], seconds=parts[2]) t = parse(time_str) d = parse(delta_str) result = t + d total_seconds = int(result.total_seconds()) sign = '' if total_seconds < 0: sign = '-' total_seconds = -total_seconds h, r = divmod(total_seconds, 3600) m, s = divmod(r, 60) return f"{sign}{h:02d}:{m:02d}:{s:02d}" print(add_time("10:30:00", "02:15:30")) # 12:45:30 print(add_time("01:00:00", "-00:30:00")) # 00:30:00
function addTime(timeStr, deltaStr) { const parse = (s) => { let sign = 1; if (s.startsWith('-')) { sign = -1; s = s.slice(1); } const [h, m, sec] = s.split(':').map(Number); return sign * (h * 3600 + m * 60 + sec); }; let total = parse(timeStr) + parse(deltaStr); const sign = total < 0 ? '-' : ''; total = Math.abs(total); const h = Math.floor(total / 3600); const m = Math.floor((total % 3600) / 60); const sec = total % 60; return `${sign}${String(h).padStart(2,'0')}:${String(m).padStart(2,'0')}:${String(sec).padStart(2,'0')}`; } console.log(addTime('10:30:00', '02:15:30')); // 12:45:30 console.log(addTime('01:00:00', '-00:30:00')); // 00:30:00
package main import ( "fmt" "strings" "strconv" ) func parse(s string) int { sign := 1 if strings.HasPrefix(s, "-") { sign = -1 s = s[1:] } parts := strings.Split(s, ":") h, _ := strconv.Atoi(parts[0]) m, _ := strconv.Atoi(parts[1]) sec, _ := strconv.Atoi(parts[2]) return sign * (h*3600 + m*60 + sec) } func addTime(a, b string) string { total := parse(a) + parse(b) sign := "" if total < 0 { sign = "-" total = -total } h := total / 3600 m := (total % 3600) / 60 s := total % 60 return fmt.Sprintf("%s%02d:%02d:%02d", sign, h, m, s) } func main() { fmt.Println(addTime("10:30:00", "02:15:30")) // 12:45:30 fmt.Println(addTime("01:00:00", "-00:30:00")) // 00:30:00 }
#!/bin/bash # 依赖 date 命令,仅支持正数加减(跨天会出问题) add_time() { local base="$1" delta="$2" # 将 hh:mm:ss 转为秒 local base_sec=$(date -d "1970-01-01 $base UTC" +%s 2>/dev/null) local delta_sec=$(date -d "1970-01-01 $delta UTC" +%s 2>/dev/null) local total=$((base_sec + delta_sec - 2*$(date -d '1970-01-01 00:00:00 UTC' +%s))) date -d "@$total" -u +%H:%M:%S } add_time "10:30:00" "02:15:30" # 12:45:30 add_time "01:00:00" "-00:30:00" # 00:30:00(bash 负号需转义)
import java.time.LocalTime; import java.time.format.DateTimeFormatter; public class TimeCalc { public static String addTime(String time, String delta) { // 仅支持正数加减,跨天会归零 LocalTime t = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm:ss")); String[] parts = delta.split(":"); int h = Integer.parseInt(parts[0]); int m = Integer.parseInt(parts[1]); int s = Integer.parseInt(parts[2]); LocalTime result = t.plusHours(h).plusMinutes(m).plusSeconds(s); return result.format(DateTimeFormatter.ofPattern("HH:mm:ss")); } public static void main(String[] args) { System.out.println(addTime("10:30:00", "02:15:30")); // 12:45:30 System.out.println(addTime("01:00:00", "-00:30:00")); // 00:30:00(负号会抛异常) } }
第五节

常见问题

Q & A
18:30:00 加上 02:45:30 结果是多少,怎么我手算不一样?

本工具按 24 小时制直接相加,秒和分满 60 进 1,小时满 24 不进位(结果仍在 00–23 范围)。18:30:00 + 02:45:30 = 21:15:30。如果你手算得到 21:75:30,那是忘了分进位;如果得到 45:15:30,那是把小时也当 60 进制了。工具结果框会同时显示进位过程,点「展开」可对照检查。

能算跨天的时长吗?比如 23:50:00 到第二天 01:10:00 差多久?

可以,但需用「时长合计」模式:把两个时间当成独立时长输入(23:50:00 + 01:10:00),结果 = 25:00:00(1 天 1 小时)。如果直接用「加减」模式做减法 01:10:00 - 23:50:00,会得到负数 -22:40:00,因为工具按同一天处理。跨天场景建议一律用时长合计,或手动把第二天时间加 24 小时再减。

为什么我输入 12:00:60 提示错误?

时间格式严格遵循 hh:mm:ss,秒和分钟的范围是 00–59,不能出现 60。12:00:60 里秒位 60 超出上限。常见误输入:把 60 秒当成 1 分 0 秒,正确写法是 12:01:00;或者把 1 分 30 秒写成 01:30,缺少秒位,应补为 00:01:30。输入框右侧有格式示例,鼠标悬停可查看。

这个工具算的时长和 Excel 里算出来差几秒,哪个准?

本工具和 Excel 的算法完全一致:都按 60 秒进 1 分、60 分进 1 小时。差几秒通常是输入格式不同导致。例如 Excel 里 1 分 30 秒如果写成 0.00104 天(数值格式),再转时间会因浮点精度损失毫秒级误差。本工具只接受 hh:mm:ss 文本,不存在浮点转换,精度到秒。建议检查 Excel 单元格是否设置为了「时间」格式而非「常规」数值。

我录了 10 个视频片段时长,想加起来看总长,一次能加几个?

本工具没有输入数量限制,可以逐次累加:输入第一个时长 → 点加号 → 再输入第二个 → 继续累加,结果区实时更新。对于 10 个片段,推荐先算前 5 个得小计,再算后 5 个得小计,最后把两个小计相加,避免中间输错一个要全部重来。所有历史操作都保留在下方记录区,可随时回看或删除某步。

为什么我输入 25:00:00 提示格式不对?

hh:mm:ss 中的 hh 范围是 00–23,25:00:00 超出小时上限。如果你需要表示「25 小时」这个时长(不是时刻),请用「时长合计」模式,该模式接受任意数值的小时(如 999:59:59)。「加减」模式处理的是具体时刻(一天内的几点几分),所以小时被限制在 0–23。两种模式在页面顶部有切换标签,注意区分使用。

这工具要联网吗?我飞机上没网能用不?

完全离线可用。本工具是纯前端实现(FE),所有计算在你浏览器里完成,不发送任何数据到服务器。页面加载后断网刷新依然能正常加减。首次访问需要联网加载页面文件,之后如果浏览器有缓存,离线也能打开。隐私方面:因为不上传,输入的时间数据不会离开你的设备。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭