日期计算器

算日期差、工作日、往前推多少天、以及距离某个日子还有多久。

工具操作区

三个小功能,各自独立:① 算两个日期相差多久;② 从某天往后/往前推 N 天;③ 倒数日。全部在浏览器本地计算。

功能一:两个日期相差多久

选好两个日期后点「计算」。

功能二:某天往后 / 往前推 N 天

填好起始日期和天数后点「计算」。

功能三:倒数日

选一个日期后点「计算」。

计算口径说明(点开看)
  • 工作日只按「周一至周五」判断,不扣除法定节假日。 本站没有节假日数据源(法定节假日与调休安排每年公布,还可能临时调整), 所以元旦、春节、国庆这些放假日,以及被调休安排上班的周末, 都不会被算进去。请假、考勤、报名截止这类事情, 请以学校校历和教务处、单位通知为准。
  • 闰年规则:公历年份能被 4 整除的是闰年,但能被 100 整除而不能被 400 整除的 不是闰年 —— 所以 2000 年是闰年,1900 年不是。闰年 2 月有 29 天,全年 366 天。 本工具的日期加减全部交给浏览器内置的日期对象,闰年判断由它按同一套规则自动完成, 不需要也不应该自己写一张闰年表。
  • 为什么日期要自己拆开解析(时区坑):按 ECMAScript 规范, new Date("2025-01-01") 这种「纯日期字符串」会被当作 UTC 午夜, 在东八区(UTC+8)换算成本地时间就是当天的早上 8 点。 一旦拿它去和本地时间(比如「今天 00:00」)做差,结果就可能整整差一天。 所以本站把 "2025-01-01" 按连字符拆成年 / 月 / 日, 再用 new Date(2025, 0, 1) 构造 —— 这样拿到的是本地时区当天的 00:00。
  • 「年 / 月 / 日」是怎么折算的:先在起始日期上按整月推进,推进到不超过结束日期为止, 剩下的不足一个月的部分再按天算(遇到 1 月 31 日加一个月这类情况,按目标月份的实际天数截断)。 这种日历口径比「总天数 ÷ 30」更接近日常说法;它和总天数不会严格对应 —— 一个月的长度本来就不固定,两者相差 1~2 天属于正常。
  • 「不含首尾」与「含今天」:同一天的两个日期相差 0 天,相邻两天相差 1 天。 口语里的「还有 10 天」常把今天也算作一天,严格的日期差则不算 —— 这就是两种算法永远差 1 天的原因,先说清口径就不会吵架。

全部计算在浏览器本地完成,不上传任何内容,刷新页面即清空。结果只做日期推算,不构成任何期限承诺;涉及报名、缴费、请假等截止时间,请以官方通知为准。

使用说明

能算哪几件事

工具分三个独立的小功能,各自有输入框和结果区,互不影响。

  • 两个日期相差多久 —— 给出总天数、按日历折算的年月日、周数与剩余天数,以及期间的工作日数量。
  • 某个日期往前或往后推 N 天 —— 给出目标日期、那天是星期几,以及只算工作日的话会落在哪一天。
  • 倒数日 —— 距离某个日期还有多少天(已过则显示过去多少天),并说明含今天与不含今天两种算法的差异。

工作日是怎么算的

工作日按周一至周五计算,不扣除法定节假日,也不补偿调休上班的周末。这一点必须说清楚,因为中国的法定节假日安排每年由国务院另行发布,而且经常包含调休 —— 也就是某些周末要上班、某些工作日放假。

要精确计算扣除节假日后的工作日,需要一份当年的节假日安排表。本工具不内置这份数据,理由是它每年都会变,内置了就必然过时,而过时的数据比没有数据更容易误导人。

所以:需要快速估算时用本工具;涉及合同期限、报名截止这类要紧的事情,请以官方日历为准。

两个容易出错的地方

第一,含首尾还是不含首尾。同样是 1 月 1 日到 1 月 3 日,不含首尾算 2 天,含首尾算 3 天。两种口径在生活中都有人用 —— 比如「活动持续几天」通常含首尾,而「距离还有几天」通常不含。工具会同时给出两个数字,你按需要取用。

第二,时区。这是个技术细节但会造成实际错误:如果用 JavaScript 直接解析「2025-01-01」这样的日期字符串,标准规定按 UTC 解析,在东八区就会变成 2024 年 12 月 31 日 08:00,做日期差时可能少算一天。本工具的做法是把年月日拆开、用本地时间构造日期对象,从根上避免这个问题。

常见问题

两个日期相差多少天,含首尾和不含首尾有什么区别?

不含首尾就是直接相减,例如 1 月 1 日到 1 月 3 日算 2 天;含首尾则把起始日也计入,算 3 天。两种口径在不同场景都有使用:说「距离考试还有几天」通常不含今天,说「活动持续几天」通常含首尾。本工具会同时给出两个结果,按你的实际需要取用即可,不用自己加减。

工作日计算会扣除法定节假日吗?

不会,只按周一至周五计算。原因是中国的法定节假日安排每年由国务院发布,并且包含调休(某些周末上班、某些工作日放假),要做到精确就必须内置当年的节假日表。而这份表每年都变,内置进去必然过时,过时的数据比没有数据更容易误导人,所以工具选择不内置并明确说明。如果是估算用没问题;涉及合同期限、报名截止这类要紧事项,请以官方日历为准。

为什么算出来的天数和我手算的差一天?

最常见的原因就是含首尾与不含首尾的口径差异 —— 比如从 3 月 1 日到 3 月 31 日,不含首尾是 30 天,含首尾是 31 天,两者都不算错,只是口径不同。另一个原因是有些人在手算时把起始日或结束日重复计算了一次。建议先确认你要的是哪种口径,再看工具给出的两个数字中哪一个符合预期。

倒数日的「含今天」和「不含今天」是什么意思?

假设今天是 1 月 1 日,目标是 1 月 10 日。不含今天的算法是 9 天(从明天开始数);含今天则从今天算作第一天,是 10 天。日常说「还有几天」一般用不含今天,而「倒计时第几天」这类说法通常含今天。工具会同时给出两个数值,避免因为口径不清而产生误解 —— 尤其在考试倒计时、项目截止日这类场合,差一天可能影响安排。

这个工具会记录我输入的日期吗?

不会。所有计算都在你的浏览器里完成,输入的日期不会发送到任何服务器,也没有任何形式的记录或统计。你可以断网使用来验证这一点。