技术参考

计算方法

了解 TimeDateLab 的计算规则、假设、限制与验证方式。

时间差计算

钟表时间模型

TimeDateLab 比较计算器中显示的本地钟点与日历值,不进行时区转换,也不按夏令时调整实际经过的时间。所有时长结果都由总秒数换算而来。

模型
钟表时间
时区
不考虑
夏令时
不考虑
计算依据
总秒数

仅时间计算

计算规则

总秒数 = 结束时刻秒数 − 开始时刻秒数 + 次日偏移 × 86,400

次日偏移只有 0 天或 1 天。同日计算不增加天数;开启“结束于次日”时恰好增加 86,400 秒。

仅时间边界情况

09:00 → 09:00
结果:0 小时
09:00 → 次日 09:00
结果:24 小时
23:59:59 → 次日 00:00:00
结果:1 秒
23:30 → 次日 01:15
结果:1 小时 45 分钟

如果结束时刻早于开始时刻,并且没有开启“结束于次日”,计算器会显示可恢复的错误,而不会返回负时长。

日期与时间计算

计算模型

日期时间标量 = 公历日序号 × 86,400 + 当日秒数 时长 = 结束标量 − 开始标量

有了日期就能确定是否跨天,因此此模式不使用“结束于次日”。结束日期时间早于开始日期时间时会报错;此模式同样不考虑时区和夏令时。

精度与舍入

  • 默认按分钟精度显示和计算。
  • 开启“包含秒”后使用秒精度;关闭时,隐藏的开始秒数与结束秒数会重置为零。
  • 精确时长始终以总秒数为准;折合小时数和折合分钟数由总秒数换算而来。
  • 折合值采用四舍五入并保留两位小数;仅当显示值并非精确值时才出现“≈”。

限制

  • 支持的钟点范围:00:00:00–23:59:59。
  • 不包含闰秒。
  • 不进行时区转换,也不按夏令时调整真实经过时间。

工时计算

单班次模型

工时计算器沿用“仅时间”模式的钟表时长模型(不含时区),接收一个开始时间、一个结束时间、明确的 0 或 1 天次日偏移,以及一次整数分钟休息扣除。

计算规则

班次总秒数 = 结束时刻秒数 − 开始时刻秒数 + 次日偏移 × 86,400 净工作秒数 = 班次总秒数 − 休息分钟 × 60

  • 休息分钟必须是非负整数,且不能超过班次总时长。
  • 净工作时间、折合小时数与总分钟数都由同一个净工作秒数换算而来。
  • 折合小时数沿用时间差计算器保留两位小数的四舍五入规则。
  • 每周工时卡、多班次、工资、加班、税费、节假日、时区与夏令时不属于此模型。

工时卡计算

每周汇总模型

工时卡计算器把已填写的每一天视为一个工作班次,并用上面的工时计算模型逐日计算:一个开始时间、一个结束时间、明确的 0 或 1 天次日偏移,以及一次整数分钟休息扣除。没有填写的那几天会被跳过;只填写了部分值的那天会报错,而不是被猜测补全。

计算规则

每周净工作秒数 = 各日净工作秒数之和 常规工时 = min(每周净工作时间, 阈值) 超出阈值工时 = max(0, 每周净工作时间 − 阈值)

  • 时间按分钟输入。每天的休息分钟必须是非负整数,且不能超过当天的班次总时长。
  • 加班阈值由你设置,范围为 0 至 168 小时,以 0.25 小时为步长。它只用于拆分每周总工时,不代表工资或法律规则。
  • 总分钟数与折合小时数都由同一个每周净工作秒数换算而来。
  • 工时卡不提供分享链接;“复制结果”会以纯文本带上全部每日记录。

天数计算

公历日期模型

日期计算采用向前推演的公历模型,支持 至 。1582 年以前的日期也按现代公历闰年规则计算;每个有效日期会转换为整数公历日序号,再进行相减。

日历
向前推演公历
范围
–
日期值
公历日序号

闰年规则

年份能被 4 整除时通常是闰年;能被 100 整除时不是闰年,除非它同时还能被 400 整除。

1900
不是闰年
2000
是闰年
2100
不是闰年

端点规则

默认

[start, end)

包含开始日期 · 不包含结束日期

开启“包含结束日期”

[start, end]

包含开始日期 · 包含结束日期

相同日期
关闭:0 天 · 开启:1 天
相邻日期
关闭:1 天 · 开启:2 天

工作日与周末天数拆分

工作日(周一至周五)与周末日(周六至周日)按星期直接分类。本工具不扣除法定节假日,因此不是考虑节假日的工作日历。

每个完整的 7 天区间包含 5 个工作日和 2 个周末日,其余日期再逐一分类。

计算守恒关系

工作日 + 周末天数 = 日历天数

边界情况与限制

  • 相同的端点与日历规则适用于跨月、跨年,以及 1900 年和 2000 年等闰年边界。
  • 结束日期早于开始日期时,计算器会报告错误;它不会静默交换日期,也不会返回绝对值。
  • 不提供法定节假日日历、自定义工作周或日期加减功能。

共用模型与数据边界

本地计算

输入处理和计算在浏览器中进行;不会把计算器输入发送给计算接口或业务接口来生成结果。

确定性模型

相同的有效输入与相同的明确规则会产生相同的计算结果。

结构化错误

无效或有歧义的状态会产生可见、可恢复的错误,而不会被静默修正。

分享片段

只有主动选择“分享”时,规范化输入与规则才会编码到网址中 # 后面的分享片段;计算结果不会被编码,片段也不会随普通 HTTP 请求发送。

分享片段仍可能出现在浏览器历史记录、浏览器同步、剪贴板、你选择的消息服务以及接收者设备中。页面脚本可以读取完整网址并将其放入第三方请求,请勿分享敏感输入。

分析边界

TimeDateLab 在正式网站上使用 Google Analytics 4、Microsoft Clarity 和 Google AdSense。本站的使用事件只记录固定的工具、模式、错误和操作状态类别,不记录计算输入或结果;第三方脚本仍可能处理网址和页面活动,包括已显示的结果。本地计算不等于所有页面数据都留在设备上。

站内工具点击可通过仅含固定跳转类别的会话存储交接给目标工具。每条记录最多使用一次,30 秒后不再使用,不包含输入、结果、网址或用户标识。页面跳转不会等待分析上报。

验证方式

实现可信度来自多种相互补充的检查。

固定边界
固定示例覆盖闰年边界、相同时刻、跨夜、支持日期范围两端和反向输入。
守恒关系
生成的输入会检查工作日与周末天数守恒、分享状态往返稳定,以及无效状态的安全处理。
独立对照
开发期间,公历日期计算会与独立的日历实现进行对照;该对照库仅用于开发,不会进入生产版本。
浏览器与界面
真实浏览器检查覆盖中英文计算流程、键盘与无障碍行为、移动端与缩放布局、分享、复制、错误恢复,以及网络和隐私边界。

这些检查可以提高可信度,但不能证明缺陷不可能存在,也不代表认证或形式化验证。