=B2-A2 返回 A2 的开始时间与 B2 的结束时间之间的时长。Excel 把时间存储为一天的几分之几(12:00 是 0.5),所以结果也是一个小数:设置为 h:mm 格式就显示为 8:30,乘以 24 就得到 8.5 小时。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Hours | Decimal hours |
| 2 | 9:00 | 17:30 | 8:30 | 8.50 |
| 3 | 8:15 | 16:45 | 8:30 | 8.50 |
| 4 | 7:30 | 12:00 | 4:30 | 4.50 |
| 5 | 13:00 | 18:20 | 5:20 | 5.33 |
第一行的结果以时间表示是 8:30,以数字表示是 8.50。13:00 到 18:20 是 5:20,即 5.33 小时。给人看的结果用 h:mm 那一列,要参与计算(比如算工资)的用小数那一列。在“常规”格式的单元格中,同样的结果会显示为原始的小数,8:30 显示为 0.354167。
加减小时和分钟
给时间加上一段时间也是同样的道理。用 TIME(时, 分, 秒) 构造要加的时长,或者把小时数除以 24、把分钟数除以 1440。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | Plus 1:30 | Plus 45 minutes | Minus 2 hours |
| 2 | 9:00 | 10:30 | 9:45 | 7:00 |
| 3 | 14:20 | 15:50 | 15:05 | 12:20 |
从 9:00 开始,三列分别得到 10:30、9:45 和 7:00;从 14:20 开始,得到 15:50、15:05 和 12:20。时间也可以写在引号里:=A2+"1:30" 加上一个半小时。
计算跨午夜的时间
22:00 到 6:00 的夜班在开始“之前”就结束了,所以 =B2-A2 是负数:-16 小时。时间不能为负,Excel 会在单元格中填满 #####。MOD(B2-A2,1) 给负数结果加上一天,正数结果则保持不变,所以白班和夜班可以放在同一列里计算。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Hours | Decimal hours |
| 2 | 22:00 | 6:00 | 8:00 | 8.00 |
| 3 | 9:00 | 17:00 | 8:00 | 8.00 |
| 4 | 23:30 | 7:15 | 7:45 | 7.75 |
这三个班次分别长 8:00、8:00 和 7:45。另一种写法是 =B2-A2+(B2<A2):结束时间较早时比较结果为 1,相当于加上一天。如果开始和结束都是完整的日期时间(2026-03-14 22:00),直接相减就够了,因为日期已经说明了每个时间在哪一天。
合计超过 24 小时的工时
h:mm 显示的是一天中的时刻,所以到 24 就会归零:一周 42 小时 30 分钟会显示为 18:30。带方括号的 [h]:mm 格式显示总小时数,不会归零。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Hours | Total as [h]:mm |
| 2 | 8:00 | 16:30 | 8:30 | |
| 3 | 8:00 | 16:30 | 8:30 | |
| 4 | 9:00 | 17:30 | 8:30 | |
| 5 | 8:00 | 16:30 | 8:30 | |
| 6 | 8:00 | 16:30 | 8:30 | |
| 7 | Total | 18:30 | 42:30 |
C7 显示 18:30,D7 显示 42:30。两个单元格存的是同一个数(1.77 天),只是格式不同。设置方法:开始 > 数字格式 > 其他数字格式 > 自定义,然后输入 [h]:mm。要得到小数形式的合计,就乘以 24:42.5。
时间与小数小时互相转换
把时间乘以 24 得到小时数,乘以 1440 得到分钟数。要转回来,就把小数小时除以 24,再把单元格设置为 h:mm 格式。HOUR 和 MINUTE 以整数形式返回时间中的时和分。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Time | Hours | Minutes | HOUR | MINUTE | Back from hours |
| 2 | 6:45 | 6.75 | 405 | 6 | 45 | 6:45 |
| 3 | 1:20 | 1.33 | 80 | 1 | 20 | 1:20 |
| 4 | 0:50 | 0.83 | 50 | 0 | 50 | 0:50 |
6:45 是 6.75 小时、405 分钟,时为 6,分为 45。1:20 是 1.33 小时。HOUR 只返回 0 到 23,所以超过一天的时长要改用 =INT(A2*24)。F 列把小数小时转回了原来的时间。如果你的工作簿中 =A2*24 显示为 18:00,说明结果沿用了 A2 的时间格式:把单元格设置为“常规”或“数值”即可。
练习:工资和夜班
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Rate | Pay |
| 2 | 8:30 | 16:00 | 18 |
轮到你了: 在 D2 中计算工资:A2 的开始时间到 B2 的结束时间之间的小时数,乘以 C2 中的时薪。
| A | B | C | |
|---|---|---|---|
| 1 | Start | End | Hours |
| 2 | 22:00 | 5:30 | |
| 3 | 9:00 | 17:00 |
轮到你了: 在 C2 中以小数小时返回班次时长,然后向下填充到 C3。班次可能会跨过午夜。
时间结果为什么显示 ##### 或小数
大多数时间计算的问题都来自三种显示问题:
#####:结果是负的时间,通常是用=B2-A2计算了跨夜班次。改用=MOD(B2-A2,1)。(列太窄时也会显示#####,把列拉宽就能分辨是哪一种。)- 0.354 这样的小数:单元格是“常规”格式。设置为
h:mm,如果你要的是小时数,就乘以 24。 - 合计偏小:总和超过了 24 小时,
h:mm归零了。改用[h]:mm。
以文本形式输入的时间('9:00,或从其他系统粘贴过来的值)不是数字:SUM 会跳过它们,所以这些单元格的合计会偏小甚至为 0。真正的时间用 =ISNUMBER(A2) 会返回 TRUE;=TIMEVALUE(A2) 可以把 "9:00" 这样的文本转换成时间。
常见问题
Excel 中怎么计算两个时间之间的小时数?
用结束时间减去开始时间,=B2-A2,再把单元格设置为 h:mm 格式。要得到数字形式的小时数,就乘以 24:=(B2-A2)*24 把 8:30 变成 8.5。
Excel 中跨午夜的时间怎么算?
用 =MOD(B2-A2,1)。22:00 到 6:00 的班次直接相减得到 -16 小时;MOD 会给任何负数结果加上一天,得到 8:00。
为什么小时合计超过 24 小时后又从零开始?
h:mm 格式显示的是一天中的时刻,所以 42 小时 30 分钟会显示为 18:30。把合计设置为 [h]:mm 格式(开始 > 数字格式 > 其他数字格式 > 自定义),就会显示 42:30。
Excel 中怎么把时间转换成小数小时?
乘以 24:=A2*24。Excel 把时间存储为一天的几分之几,所以 6:45 是 0.28125,乘以 24 就是 6.75 小时。要得到分钟数就乘以 1440。
Excel 中怎么给时间加上几分钟?
=A2+TIME(0,45,0) 加上 45 分钟。=A2+45/1440 效果相同,因为一天有 1440 分钟。TIME 也可以加小时:TIME(2,30,0) 就是两个半小时。