Excel中如何计算dd/mm/yyyy hh:mm格式单元格的时间差?
这问题我之前帮好几个朋友解决过,Excel这默认的日期时间格式确实有点坑人——其实核心原因是Excel把所有日期时间都存成了数值:整数部分是从1900年1月1日开始算的天数,小数部分是当天的时间占比。你用=C3-B3算出的差值本质是一个日期时间数值,默认格式就会把这个数值转成完整的日期时间,所以才会带出1900年1月的前缀。
解决方法
方法1:自定义单元格格式(推荐,保留数值属性)
这是最方便的方式,既能保留差值的数值特性(方便后续计算),又能显示成你要的“天、时、分”格式:
- 选中所有计算差值的单元格
- 右键选择「设置单元格格式」(或者按
Ctrl+1快捷键) - 切换到「自定义」标签页,在类型框里输入对应的格式代码:
- 如果你要显示X天X时X分(比如3天5小时20分),用:
d"天" h"时" mm"分" - 如果差值可能不足1天(比如只有25小时),想直接显示累计小时数(比如25时20分),用:
[h]"时" mm"分"(方括号的作用是累计超过24小时的小时数,不加的话会把25小时拆成1天1小时) - 要是需要更严谨的补零格式(比如05时03分),就用
d"天" hh"时" mm"分"
- 如果你要显示X天X时X分(比如3天5小时20分),用:
- 点击确定,瞬间就看不到1900年的前缀了!
方法2:用TEXT函数直接生成文本结果
如果不需要后续对差值进行计算,只想得到纯文本格式的“天、时、分”,可以直接用TEXT函数格式化公式结果:
=TEXT(C3-B3,"d""天"" h""时"" mm""分""")
这里的双引号是Excel里的转义写法,确保输出的文本里包含“天”“时”“分”这些字。如果要处理负数差值(比如结束时间早于开始时间),可以套个ABS函数:
=TEXT(ABS(C3-B3),"d""天"" h""时"" mm""分""")
额外提醒
如果差值是负数,自定义格式可能会显示乱码(比如########),这时候可以先判断差值正负,再设置不同的格式:
=IF(C3-B3>=0,TEXT(C3-B3,"d""天"" h""时"" mm""分"""),"负"&TEXT(ABS(C3-B3),"d""天"" h""时"" mm""分"""))
内容的提问来源于stack exchange,提问作者paradroid
相关产品推荐
相关产品推荐

