Command Palette

Search for a command to run...

日期差计算器:计算日期之间的天数,没有一个错误

日期差计算器:计算日期之间的天数,没有一个错误

T
Toolz Team
|Jul 12, 2026|19 最小读数

时间和日期 合集的一部分

9美元 曾因围栏退款给客户 我正在建的SaaS试用14天,按比例计算"天数用"为 endDate - startDate 1号晚上11点开始试用,除以86400000,四舍五入,1号下午1点转换,数学说14天- 但客户's心智模型说"我1号报名,那's第一天,"这就使第15天十五,试用是14天还是14晚,我的代码和我的定价页面不一致,客户在我之前就注意到了。

That's 日期算术的那点事:减法是平凡的,并且 定义 is 哪里出问题 包容或排他 计数是否"a month"从1月31日是2月28日,3月2日,还是3月3日"day"是24小时,而夏令时使一年中的一天变成23小时,而另外25小时。这些中的每一个都至少咬过我一次,而I'已经发货了十多年Laravel和React应用程序。

日差计算器 exist来精确地回答问题,这样你就可以根据已知正确的结果检查你的假设 - 和你的代码。toolz。dev上的那个计算任意两个日期之间的差距,以天,周,月和年为单位,完全在你的浏览器中使用它:验证发票期限,检查合同期限,结算"距离启动"还有多少天,用链接而不是论证在Slack中进行辩论。

本指南涵盖了如何使用它,更有用的是,五种方法默默地告诉您约会数学,因此您可以在自己的代码中识别它们。

TL;博士: 在其中选择两个日期 Toolz.dev 日期差计算器 并得到以天、周、月、年为单位的确切差距 - 即时、免费、客户端。每次检查的三个陷阱:包容性与排他性计数(结束日期是否计数?)、月份算术(月份有 28.31 天,因此 "1 个月后 " 是模糊的)和时区(没有时区的日期是每个区域中不同的时刻 - 首先用时间戳转换 时间戳转换器)。对于重复出现的间隔而不是一次性的间隙,that's 是该职位的工作 克朗解析器


主要特点

确切的日数(无夏令时地雷)

基础输出:两个日历日期之间的精确天数。天真的 (b - a) / 86400000 you'll发现在一千个javascript代码库中每当一个节省白天的过渡位于本地时间的日期之间时就会中断,产生像89.958333天这样的结果,然后以错误的方向四舍五入。这个计算器通过在做任何算术之前将两个日期解析为utc来避开整个bug类-utc永远不会向前弹跳或向后退缩,所以一天总是恰好有86,400,000毫秒,并且计数出来干净。年/月/天的细分,同时,用真实的日历数学计算(提前整个月份,然后计算剩余的天数),而不是除以平均一个月。当你的代码说90,计算器说89时,相信计算器,然后去找到你本地时间数据中的dst边界。

一次多个单位

days, weeks, months, years表示的相同差距- 同时。这比听起来更有用,因为不同的领域说的是不同的单位:法律合同在几个月里说话,冲刺计划在几周里说话,计费在几天里说话,人力资源在服务年份里说话。3月15日至9月15日之间的差距是184天,26周和2天,或者恰好是6个月,而你需要哪个数字完全取决于谁's询问。将所有这些都放在一个视图中意味着你停止做"184除以7是。。。26和change"算术在你的脑海中,这正是算术人错了。

独家总计加全包营业日

栅栏柱问题,可见。这里的总日数是 独家-日期之间的差距 - 所以周一到周五读作4。就在它的正下方,计算器算 工作日 (周一至周五,周末除外)使用 Excel's NETWORKDAYS 使用的包容性约定,同时它还告诉您它下降了多少个周末天,因此相同的周一至周五跨度读作 5 个工作日。在同一视图中看到独家总计和包容性工作日计数,这是一个每日小提醒,"多少天"有两个正确的答案,具体取决于您是否计算两个终点。我的 9 美元退款是因为我的代码回答了独家问题,而我的定价页面询问了包容性问题 - 同时显示两个约定的工具是一个工具,可以阻止您意外选择一个。

跨越月份、闰年和世纪的作品

2月有28天,除了它有29天; 2024年是一个闰年,2100韩元't尽管可以被4整除(捕捉每个人的格里高利世纪规则)。计算器获得所有这些权利,因为它使用真实的日历规则而不是"一年是365.25天"近似值。如果您'曾经需要跨越闰年2月的日期范围的日数 - 利息应计,SLA窗口,2月29日生日附近的年龄计算 - 您知道这些边缘案例正是手卷数学失败的地方。

即时、无注册、无上传

Dates进去,答案出来,完全客户端。没有什么东西被传输或存储。对于大多数日期数学来说,这是方便而不是安全 - 但并非总是。就业日期,医疗时间表,诉讼截止日期:日期对可以悄悄敏感,那里's没有理由计算器应该看到它们服务器端。工具加载速度快,加载后离线工作,这也使得它成为你在会议中期达到的东西有人问"等等,那张票开了多久了?"


如何使用日期差计算器

1步:输入开始日期

打开 日期差计算器 and set第一个日期。使用挑选器, 直接键入它, 或点击今天按钮, 将其折叠到当前日期。那里's一个可选的时间字段(HH:mm),如果你需要总计到小时或分钟而不是午夜到午夜。如果你的源数据是Unix时间戳或带有时间分量的ISO 8601字符串, 先解析到日历日期- 并考虑时区, 因为 1751846400 是东京的7月7日,洛杉矶的7月6日。 时间戳转换器 处理该翻译。

2步:输入结束日期

Set第二日期。order does't need to concern you - 一个差异就是一个大小,而那里's一个交换按钮,如果你无论如何都想翻转开始和结束,这里值得深思:你的结束日期是最后一天 期间或第一天 之后 它? "结束12月31日"的订阅以及"更新1月1日"的订阅描述具有不同结束日期的同一时期,这是计算"相同"的两个人之间一天分歧的最常见来源范围。

第 3 步:阅读您需要单元中的差异

结果显示了单位之间的差距。拿你的问题所计价的那个,然后用手抵制它们之间的转换 - "6个月"和"182.5天"不可互换,因为月份是n't一个固定的长度。如果答案将进入合同、发票或SLA,请注明单位 计数约定("30个日历日,不包括开始日期"),因此下一个人不会't重新引入您刚刚解决的歧义。

第 4 步:理智检查您的代码

如果您're 使用计算器调试应用程序,请将其答案与您的代码为同一对日期产生的结果进行比较。恰好一天的不匹配意味着围栏柱或时区边界问题。分数日的不匹配意味着跨越 DST 变化的毫秒除法。一个月结束时前后两三天的不匹配意味着月算数溢出。 尺寸 错误的是诊断--下面将对每一个进行更多诊断。


技术深度潜水:为什么约会数学会出错

Date算术看起来像减法,实际上是一堆日历规则、时区政治、定义模煳,五种失败模式几乎占了每一个bug I've发货或审核。

1。围栏(逐一)问题。 1天到第15天之间有14个间隔但如果计算两端则有15天。两个数字都不是"差额"直到您指定约定。酒店的晚上,贷款利息和租赁期限使用独家计数;处方,活动持续时间和"覆盖的天数"通常使用包容性的错误模式:系统的一部分使用每个。将约定写下来。

2、月不是一个单位。 "1月31日后一个月"没有明显的答案-2月31日does't存在。javascript's的遗产 Date 通过溢出处理此问题: new Date(2026, 0, 31) 加上 3 月 3 日(2 月 28 日 + 3 个溢出日)降落一个月。 PHP's strtotime('+1 month') does same。大多数人类,以及大多数计费系统,都想要 夹紧 相反:1 月 31 日 + 1 个月 = 2 月 28 日(或 29 日)。库有所不同 - 日期 fns 和默认情况下的碳钳在其月份添加帮助器中,原始 Date 溢出--还有新的 时间 API make the behaviour as explicit option,这是正确的设计,如果你的app在28号之后每月做任何有主播日期的事情,这就是你有bug,不管你've还没找到。

3、一天并不总是24小时。 在任何遵守夏令时的时区,一年中有一天持续 23 小时,另一天持续 25。计算日差的代码为 milliseconds / 86_400_000 每当范围跨越过渡时以及随后的过渡时都会产生非整数 Math.round vs。 Math.floor choice决定你'是否一退而求其次,稳健的方法是在日历日期进行日算,而不是在瞬间 - 或者将所有内容标准化为UTC,没有DST,然后再进行划分。

4、没有时区的约会不是一个时刻。 "2026-07-06"是24小时全天候开放的 范围 that 在每个时区中在不同的时刻开始和结束,这个 bug 在 JavaScript 中最恶心的版本: new Date("2026-07-06") 解析为 世界标准时间午夜 ecmascript规格,所以在格林威治以西的任何时区它渲染为7月5日。我在react仪表板中为此失去了一个下午的大部分时间,该仪表板的日期来自postgres DATE 列提前一天显示给美国用户-列没问题,api没问题,构造函数是bug,如果你从这篇文章中拿走一行:永远不要裸喂 YYYY-MM-DD 字符串到 new Date() 当当地时间解释很重要时。

5。ISO 8601是另一个问题的答案。 ISO 8601 (2026-07-06的,(大端的,零填充的)解决日期 代表- it's 明确在哪里 07/06/2026 义俄亥俄州的7月6日和牛津的6月7日,并且它按词典编排排序。在每个日志、API和文件名中使用它。但它对日期没有任何作用 算术;一對格式完美的ISO日期,上面還是四個問題都存在,格式學科和數學學科是分開的學科。

元课程:使用真实的日历库(当您的目标支持时,使用 date-fns、Luxon、Carbon 或 Temporal),在日历空间而不是毫秒空间中进行算术,并验证边缘情况 - 月末、闰日、DST周末 - 针对像这样的独立来源 计算器。 独立验证是工具的全部要点;更多关于这一理念 时间戳转换器指南


常见用例

计费周期和试用时间

Date math上存活和死亡的订阅系统。按比例分配需要在计费期内准确的日计数;试验需要明确的结束日期;年度计划需要生存2月29日。在构建支付流时,我现在计算每个周期边界两次 - 一次在代码中,一次在计算器中 - 在编写测试之前。它至少四次捕获了真正的错误,总是在月末或DST边缘,并且总是那种本来会以混乱的客户电子邮件的形式出现。如果金钱与系统中的任何位置的日计数相乘,请独立验证日计数。

项目截止日期和冲刺规划

"从现在到发布日期之间有多少个工作周?"在每次计划会议上都会出现,人们在脑海中计算的答案可靠地偏离了一两个- 人类不擅长以跨月边界的天数和周数来获得真正的日历差距需要五秒钟,并且会话的基础从那里你减去假期并诚实地缓冲,而不是从一个已经乐观的数字开始一周。

合同、通知和截止日期计算

法律和人力资源日期附带无情的约定:90 天的通知期、30 天的治疗窗口、到期申请"服务 21 天内。"这些正是包容性与排他性雷区,延迟一天的成本明显低于提前一天的成本。计算跨度,然后确认文档使用哪个端点约定。 (对于任何真正重要的事情,律师都会击败计算器 - 该工具告诉您计数,而不是管辖权's 计数规则。)

年龄和任期计算

Ages,服务年限,账户寿命 - all "年月差异 " 夹紧规则隐藏在内部的问题(2月29日出生的人根据管辖区的不同,法定生日为2月28日或3月1日,这是工程师必须编码的真实答案 - 这个帐户有多大,距离上次部署有多长时间,事件发生后有多少天 - 计算器给出了确切的数字,而无需加载REPL。

数据合理性检查

当报告说平均订单到交货间隔为 47 天并且您的肠道说两周时,请实际排一行并手工检查两个日期。 "bug" 的时间的一半是时区偏移或上游解析中的交换月/天。对照可信计算器抽查三行或四行是决定是否不信任管道或肠道的最快方法。对于观察两份导出报告之间变化的情况, 文本差异工具 与此工作流程完美配对。


比较计算约定

公约 周一 → 周五等于 用于 小心
专(差距) 4天 酒店住宿晚数、应计利息、以天为单位的年龄 感觉"一短"致非技术读者
含(跨度) 5天 用药日、活动持续时间、"承保日" 与专属系统混合时,可一一关闭
营业日 4或5减去假期 SLA、运输估算、法定截止日期 假期日历因国家甚至合同而异
24小时的确切时段 取决于时间 租赁、停车场、API 费率窗口 DST使当地的一天23小时,另一个25小时
日历月/年 "1个月后" 计费周期、合同、租赁 月长各不相同;月末夹紧与溢出

表's 真实信息:"这些日期之间相隔多长时间"不是一个问题,选择与您的问题匹配的行,在您的代码和副本中明确命名,整个争议类别消失,这是同一学科的其余部分 web开发人员工具包 不断推动 - 让隐式显式化,让一半的错误消失。


常问问题

什么是日期差计算器?

日期差计算器计算两个日历日期之间的确切差距,以天、周、月和年表示。与心算或天真的毫秒减法不同,它应用真实的日历规则 - 可变的月份长度、闰年、世纪规则 - 因此结果在诸如闰年中的二月或跨越夏令时过渡的范围等边缘情况下是正确的。

如何计算两个日期之间的天数?

将两个日期输入 日期差计算器 read the day count。用手做, 数起始月份剩下的日子, 之间加上整整几个月, 然后把日子加到结束月份- 并预先决定是否要数结束日期本身。最后一个决定, 包容性与排他性计数, 是大多数手动计算出错的地方。

计算日期之间的天数时是否包含结束日期?

By convention, no - 标准的"差异"是独家的,计算日期之间的间隔,所以周一到周五是4天。但许多现实世界背景(用药时间表,覆盖期,事件长度)都包含在内,使其5。既没有错;他们回答不同的问题。总是说明你're使用哪个约定当数字进入合同或发票。

为什么我的 JavaScript 日期数学给出了不同的答案?

三名常见的嫌疑人: new Date("YYYY-MM-DD") UTC午夜解析裸日期字符串,在西部时区将日期移位一天;将毫秒差除以86,400,000次突破在DST转换中,其中一天是't 24小时;并添加月份与遗留日期对象溢出在月份结束(1月31日 + 1个月 = 3月3日)。使用日历感知库,如日期-fns,Luxon或时间API,而不是原始算术。

当月份的长度不同时,如何计算?

月差异是在日历上计算的,而不是通过将天数除以平均值:3月15日至9月15日恰好是6个月,即使它's 184天,模糊性出现在锚日期之后28日 - 1月31日之后的一个月通常夹紧到2月28日或29日行为良好的计费系统夹紧;幼稚的代码溢出到3月初,这是一个值得检查的真正错误。

闰年会影响日期差异吗?

是--跨越闰年2月29日的任何范围(如2024年或2028年)包含的日数比普通年份的相同范围多一天,正确的计算器会自动解释其中的微妙规则:可被100整除的年份不是闰年,除非也可被400整除,因此2000年是闰年,但2100韩元't be。手卷"可被4"整除,检查完全失败在那些年。

时区如何影响日期之间的天数计算?

裸日期是每个时区不同的 24 小时窗口,因此不同区域的两个系统可以合法地不同意 "today"是 - 并且午夜附近的时间戳可能会落在不同的日历日期,具体取决于用于解释它的区域。对于纯粹的日历日期差异,时区 don't 应用;对于时间戳派生的日期,首先使用类似的工具将两个时间戳转换为同一区域 时间戳转换器

Toolz。dev 日期差分计算器是免费且私密的吗?

是的,两者都很重要。它完全在您的浏览器中运行,无需注册 - 您输入的日期永远不会上传、记录或存储在任何地方。这比看起来更重要,因为日期对可以编码敏感事实,例如工作期限、医疗时间表或法定截止日期,并且有's没有技术原因计算器需要看到它们服务器端。

Frequently Asked Questions

A date difference calculator computes the exact gap between two calendar dates, expressed in days, weeks, months, and years. Unlike mental math or naive millisecond subtraction, it applies real calendar rules — variable month lengths, leap years, century rules — so the result is correct across edge cases like February in a leap year or ranges spanning daylight saving transitions.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!