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

如何计算两个日期时间的绝对值时间差并格式化为HH:MM:SS

如何计算两个日期时间的绝对值时间差并格式化为HH:MM:SS

我来帮你解决这个问题!你遇到的核心问题是没处理日期差值的正负:当@Date2晚于@Date1时,DATEDIFF(s, @Date2, @Date1)会返回负数,用这个负数去DATEADD到基准时间0(也就是1900-01-01 00:00:00),得到的其实是基准时间往前推对应秒数的结果,自然就变成了23:59:59这种不符合预期的值。

解决方法很简单,只需要对秒数差值取绝对值,确保不管哪个日期在前,我们计算的都是正的时间差,再做后续的格式转换就可以了。

修改后的完整代码

DECLARE @Date1 datetime
DECLARE @Date2 datetime

set @Date1='6/30/2023 11:06:39 AM'
set @Date2='6/30/2023 11:06:40 AM'

-- 取秒数差的绝对值,再转换为HH:MM:SS格式
select left(CONVERT(varchar(12), DATEADD(s, ABS(DATEDIFF(s, @Date2, @Date1)), 0), 114), 8)

代码分步解释

  1. ABS(DATEDIFF(s, @Date2, @Date1)):先计算两个日期之间的秒数差值,再用ABS()取绝对值,保证结果始终是正数,不管哪个日期更早。
  2. DATEADD(s, ..., 0):把这个正的秒数差加到SQL的基准时间1900-01-01 00:00:00上,得到一个代表时间差的datetime值。
  3. CONVERT(varchar(12), ..., 114):用114格式转换后会得到HH:MI:SS:mmm的字符串(包含毫秒),最后用left(...,8)截取前8位,就得到了我们需要的HH:MM:SS格式。

测试验证

  • 当@Date2比@Date1晚1秒时,结果会是00:00:01,完全符合预期。
  • 反过来如果@Date1比@Date2晚5分钟,比如@Date1='6/30/2023 11:11:39 AM',@Date2='6/30/2023 11:06:39 AM',结果会是00:05:00,同样正确。

备注:内容来源于stack exchange,提问作者unicorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:04:36