日期时间 本地计算 开箱即用 内置示例 不留痕迹

时间加减与时长计算工具

时刻 ± 时长:如 23:50 + 30m 得次日 00:20,并单独给出 +1 天的偏移;时刻差:结束时刻减开始时刻,结束早于开始时可选择按次日计算;时长求和:多行时长(`2h15m`、`45m`、`3600s`、`2:15`)累加,同时给出 H:MM:SS 与「X 天 X 小时 X 分」两种写法。

「23:50 加 30 分钟是几点」「14:20 到 16:05 干了多久」「这周累计加班多少小时」——时刻加减、时刻差、时长求和是排班、工时、日志处理的高频小算术。本工具三个模式分开算:时刻 ± 时长(自动跨天并标注 +1 天)、时刻差(结束早于开始可选按次日)、多行时长累加。

输入格式很宽松:时长接受 2h15m、45m、3600s、2:15 等写法,混着填也行。口径提醒:时刻差默认同日相减,结束早于开始时按次日算(夜班 22:00 到 06:00 是 8 小时);求和结果同时给 H:MM:SS 与「X 天 X 小时 X 分」两种写法,超过 24 小时别误读成时刻。

使用步骤

  1. 选模式:时刻加减 / 时刻差 / 时长求和。
  2. 加减模式填时刻与时长,看结果与跨天标注(+1 天)。
  3. 时刻差模式结束早于开始时,勾选「按次日计算」处理夜班。
  4. 求和模式每行一个时长(2h15m / 45m / 2:15 混填均可)。

计算原理与示例

时长写法的解析口径

时长支持四类写法:带单位组合 `1d2h3m4s`(可只写其中一段)、`H:MM` 或 `H:MM:SS` 冒号写法、纯数字(按分钟理解,方便算加班)、以及带负号的形式 `-30m`。解析时会校验整串是否被单位完全覆盖,`1h30` 这类结尾没有单位的写法会报错,避免把 30 当成秒还是分靠猜。

跨天偏移怎么算

结果时刻始终落在 00:00:00~23:59:59,越界部分单独用天数表示:23:50 + 30m 的秒数是 87600,工具给出时刻 00:20:00 与 +1 天,而不是显示 24:20。负值对称处理:00:20 − 40m 得到 23:40:00 与 −1 天,而不是负的时刻。

为什么不做日期运算

本工具只处理「时刻」与「时长」,不处理日期:不判断闰年、不管月末、不知道今天几号。这也是它可靠的原因——没有时区、夏令时与日历规则的介入,结果完全由纳秒级之外的四则运算决定。需要日期加减请用日期计算器。

代码示例

JavaScript 时刻加减:分钟数取模

function addMinutes(hhmm, minutes) {
  const [h, m] = hhmm.split(":").map(Number);
  const total = h * 60 + m + minutes;
  const dayShift = Math.floor(total / 1440);          // 跨天偏移
  const t = ((total % 1440) + 1440) % 1440;
  const pad = (n) => String(n).padStart(2, "0");
  return { time: pad(Math.floor(t / 60)) + ":" + pad(t % 60), dayShift };
}

addMinutes("23:50", 30);   // { time: "00:20", dayShift: 1 }

Python timedelta 处理跨天

from datetime import datetime, timedelta

t = datetime(2026, 9, 15, 23, 50) + timedelta(minutes=30)
t.strftime("%H:%M")        # "00:20"
t.day - 15                  # 1(跨天偏移)

# 时长求和:
from datetime import timedelta
s = timedelta(hours=2, minutes=15) + timedelta(minutes=45)
str(s)                      # "3:00:00"

常见问题

为什么 23:50 加 30 分钟显示的是 00:20,而不是 24:20?

时刻部分被归一化到 0 点到 24 点之间,越过的部分单独用「+1 天」表示,这样输出永远是一个合法的时刻,方便直接读成「第二天凌晨 0:20」。如果你需要连续的 24 小时制数字,看结果上方给出的总秒数或时长写法。

时长能写成纯数字吗?会按什么单位理解?

可以,纯数字按分钟理解:输入 90 表示 90 分钟,方便估算加班与会议时长。要表达秒请写 90s,要表达小时请写 1.5h 或 90m,避免歧义。

时间差计算里的跨天开关是做什么的?

它决定「结束时刻早于开始时刻」时的处理方式。开启(默认)表示已经把结束时刻理解为次日,例如 23:00 开始、次日 01:00 结束,差值按 2 小时算;关闭则允许负值,直接得到 −22 小时,用来表示时间顺序被填反了。

能算两个日期之间相隔多少天吗?

不能,本工具只处理时刻与时长,不加载日历。要算日期差请用日期计算器或工作日计算器,它们会正确处理闰年、大小月与工作日规则;把日期算完后再回到这里算时分,两步配合最稳。

求和结果里出现 26:15:00 是什么含义?

那是把总时长按「小时累计」显示,26 小时即 1 天 2 小时,超过 24 小时不归零,便于统计一周或一个项目的总工时。同一份结果里也会给出「1 天 2 小时 15 分」的写法,两者完全等价。

只写秒数需要带单位吗?

需要。单独的数字会被当作分钟,写 45s、1h 才有明确单位。组合写法如 1h30m 也必须每段带单位,工具会校验整串是否被单位覆盖完,多余的裸数字会报错。

负数时长怎么写?

在时长前加负号,例如 -30m、-2:00,表示向前回溯。时刻加减里也可以用减号运算符,效果等价;时间差在关闭跨天开关时也会输出负值结果。

时刻能写成 25:00 这种超过 24 小时的吗?

可以。小时位允许 1~3 位数字,26:30 表示次日 2:30,用于跨夜排班、跨天工时这类场景。换算结果依然会归一化到 0~24 点并给出天数偏移,不会丢失信息。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。