时间日期 · 倒计时 / 计时

工作日计算

起始日±N 工作日/区间内工作日数

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 53 次使用
起始日 ± N 个工作日 · 区间内工作日数(可计入法定节假日调休)
起始日期 start date
运算与工作日数
起始日期 from
结束日期 to
结果日期
就绪 · 选择模式并输入即可实时计算
第一节

关于本工具

About

合同里写着‘审批通过后5个工作日’,日历上数了7天还没动静——因为中间夹了个周末和清明。这个工具用起始日加N个工作日直接算出到期日,或框定日期区间统计实际工作日数,节假日、调休都算得准。所有计算在浏览器本地完成,日期规则不会上传到任何服务器。

使用场景

合同交付日核验

法务审核合同时,条款写着「乙方应于甲方发出书面通知后 15 个工作日内完成交付」。通知日是 3 月 20 日,但中间夹着清明节和五一调休。人工数日历怕漏算调休日,用本工具输入起始日与 15 个工作日,直接得到准确的截止日期,避免因日期计算失误导致合同违约。

项目排期倒推启动日

产品经理规划新功能上线,运营要求必须在 6 月 1 日前完成灰度测试。开发评估需要 10 个工作日,但 5 月有劳动节假期。用本工具以 6 月 1 日为基准,向前减去 10 个工作日,得出最晚启动日是 5 月 17 日,比人工推算提前了 2 天,及时调整了资源分配。

投标材料准备倒计时

投标截止日是 11 月 15 日下午 5 点,但公司内部盖章流程需要预留 3 个工作日。11 月 8 日才拿到最终版标书,不确定是否来得及。用本工具输入 11 月 15 日为终点,向前减 3 个工作日,得到最晚送章日是 11 月 12 日,确认时间充裕,避免了通宵赶工的慌乱。

跨国会议日期协调

中国团队与德国团队约定在 7 月 10 日后的 5 个工作日内开会,但德国 7 月有暑假,中国没有。用本工具计算区间内工作日数,发现 7 月 10 日至 7 月 16 日只有 4 个工作日(德国休假 1 天),实际可用时间不足,于是将会议推迟至 7 月 17 日那周,确保双方都有人出席。

考试报名截止确认

CPA 考试报名通知写着「报名截止日为发布通知后 10 个工作日」,通知发布于 4 月 3 日(周三)。考生不确定 4 月 3 日当天是否算第一天,且中间有清明节。用本工具输入起始日与 10 个工作日,得到截止日为 4 月 18 日,比人工估算的 4 月 17 日多出 1 天,避免了错过报名的风险。

对比矩阵

维度本工具Excel 工作日函数手工翻日历
离线可用纯浏览器计算,断网可用需安装 Office 软件完全离线
操作速度输入日期和天数即刻出结果需编写 NETWORKDAYS 公式逐日数,耗时长易错
节假日适配内置中国法定节假日规则需手动维护节假日列表依赖个人记忆
区间计算支持区间内工作日数统计需嵌套公式实现逐日判断,效率极低
学习成本零学习,打开即用需了解函数语法及参数无学习成本但繁琐
第二节

使用指南

Getting Started

使用步骤

  1. 1在「起始日期」输入框点选或手动键入日期,日历面板同步高亮所选日
  2. 2选择计算模式:点「加/减工作日」或「区间工作日数」,右侧说明文字随之切换
  3. 3若选加减模式:在「天数」输入框键入正数(加)或负数(减),下方结果区实时显示目标日期
  4. 4若选区间模式:在「结束日期」输入框点选或键入日期,结果区自动统计两日间的工作日总数
  5. 5点「排除法定假日」开关可启用自定义假日列表,勾选后结果区数字即时更新

输入输出示例

输入输出说明
起始日 2025-03-03,加 5 个工作日2025-03-10常规:从周一加 5 个工作日,跳过周末,验证基础加法功能
起始日 2025-03-03,减 3 个工作日2025-02-28常规:从周一减 3 个工作日,验证减法功能,结果回到上周五
区间 2025-03-03 至 2025-03-07,计算工作日数5常规:完整周一至周五区间,验证区间内工作日计数,无节假日干扰
起始日 2025-03-01(周六),加 1 个工作日2025-03-03边界:起始日为周末,工具应自动跳到下一个周一,验证起始日非工作日的处理
起始日 2025-12-31,加 1 个工作日2026-01-01边界:跨年场景,验证年份边界计算正确,不因年份切换出错
区间 2025-03-03 至 2025-03-03,计算工作日数1边界:起止日相同,若该日为工作日则返回 1,验证单日区间逻辑
起始日 2025-03-03,加 0 个工作日2025-03-03易错:加 0 个工作日,用户可能误以为会出错,实际应返回起始日
起始日 2025-03-03,加 -2 个工作日2025-02-27易错:输入负数工作日,工具应视同减法,验证负数输入的处理一致性

常见错误对照

1.把「工作日」当成「自然日」计算

✗ 错误从 2024-01-01 往后推 5 个工作日,用户输入 +5 后期待结果是 2024-01-06(周六)
✓ 修复正确输入 +5,工具返回 2024-01-08(周一)

工作日定义排除周六、周日。用户常把「5 天后」等同于「5 个工作日」,但后者会跳过周末,导致结果晚于自然日。

2.跨周时忘记周末跳过规则

✗ 错误从 2024-04-26(周五)往后推 1 个工作日,期待 2024-04-27(周六)
✓ 修复正确输入 +1,工具返回 2024-04-29(周一)

周五加 1 工作日必须跳过周六、周日,直接到周一。用户常忘记「周五→下周一」这个跳跃,误以为周六也算工作日。

3.法定节假日未手动排除,导致结果不准确

✗ 错误计算 2024-10-01 到 2024-10-07 的工作日数,输入区间后得到 5 天(周一至周五)
✓ 修复用户需先确认工具是否支持「排除法定节假日」功能;若不支持,应手动减去国庆节 3 天法定假,实际工作日为 2 天

工作日计算通常只排除周末,不内置法定节假日表。用户若用于请假/考勤,需自行核对当年国定假日安排,否则结果会多算。

4.日期格式不统一导致解析错误

✗ 错误输入 2024/1/1 或 2024.1.1 或 1/1/2024
✓ 修复统一使用 YYYY-MM-DD 格式:2024-01-01

工具严格按 ISO 8601 解析日期。斜杠、点号、月日年顺序会导致解析失败或得到错误日期(如 1/2/2024 可能被当成 2 月 1 日)。

5.负号与数字之间误加空格

✗ 错误从 2024-01-10 往前推 5 个工作日,输入 - 5
✓ 修复输入 -5(负号紧贴数字,无空格)

输入框按数值解析,空格会被当作分隔符或非法字符,导致解析为两个 token 而报错。负号必须直接连在数字前。

6.区间计算时把「起始日」算两次

✗ 错误计算 2024-01-01 到 2024-01-05 的工作日数,手动数出 5 天(含 1 日、2 日、3 日、4 日、5 日)
✓ 修复工具返回 4 天(排除起始日,只算 2 日到 5 日)

工作日区间计算通常采用「半开区间」或「排除起始日」规则,与 Excel NETWORKDAYS 行为一致。用户习惯数头尾都算,导致多计 1 天。

7.把「往前推 N 工作日」与「区间内工作日数」混淆

✗ 错误想算 2024-01-01 往前 3 个工作日是哪天,却在「区间」输入框里填起始日 2024-01-01、结束日 2024-01-03
✓ 修复在「起始日 ± N 工作日」模式下输入 -3,得到 2023-12-27(周三)

工具提供两种模式:一种是「起点+偏移量」算出具体日期,另一种是「区间」统计天数。用户常把偏移量当成结束日期来用,得到完全不同的结果。

8.忽略时区影响,跨日边界时结果偏差

✗ 错误用户在北京时间 2024-01-01 23:00 计算从当天起往后 1 个工作日,期待得到 2024-01-02
✓ 修复工具基于 UTC 日期计算,结果仍为 2024-01-02,但若用户处于 UTC-12 时区,实际当地日期可能已是 1 月 2 日

纯前端工具使用浏览器本地时间,但日期计算以 00:00 为界。跨时区用户若在深夜操作,工具显示的「今天」可能与当地日历日期不同。

第三节

工作原理

How It Works

核心公式

工作日数 = ∑_{i=start}^{end} [ 日期 i 不是周末且不是法定节假日 ]

变量说明

  • start起始日期(含)
  • end结束日期(含)
  • 周末周六、周日
  • 法定节假日国务院公布的全体公民假日

示例

计算 2025-01-01 至 2025-01-10 的工作日数。期间含周末:1月4日(周六)、1月5日(周日)、1月11日(周六,超出区间不计);法定节假日:1月1日(元旦)。逐日判断:1月1日(元旦,非工作日)、1月2日(周四,工作日)、1月3日(周五,工作日)、1月4日(周六,非工作日)、1月5日(周日,非工作日)、1月6日(周一,工作日)、1月7日(周二,工作日)、1月8日(周三,工作日)、1月9日(周四,工作日)、1月10日(周五,工作日)。合计工作日数 = 8 天。

输入起始日±N 工作日本地日期解析排除周末(纯浏览器)输出结果目标日期 / 天数区间天数计算遍历日期范围统计工作日输出结果区间内工作日数注:所有计算在浏览器本地完成,数据不上传服务器
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

from datetime import datetime, timedelta # 起始日±N工作日 start = datetime(2024, 1, 15) # 周一 n = 5 # 向前5个工作日 count = 0 d = start while count < abs(n): d += timedelta(days=1 if n > 0 else -1) if d.weekday() < 5: # 周一至周五 count += 1 print(f"{start.date()} 后 {n} 个工作日: {d.date()}") # 输出: 2024-01-22
// 起始日±N工作日(浏览器/Node.js) const start = new Date('2024-01-15'); // 周一 const n = 5; let count = 0; let d = new Date(start); while (count < Math.abs(n)) { d.setDate(d.getDate() + (n > 0 ? 1 : -1)); const day = d.getDay(); if (day >= 1 && day <= 5) count++; // 周一到周五 } console.log(`${start.toISOString().slice(0,10)} 后 ${n} 个工作日: ${d.toISOString().slice(0,10)}`); // 输出: 2024-01-15 后 5 个工作日: 2024-01-22
package main import ( "fmt" "time" ) func main() { start := time.Date(2024, 1, 15, 0, 0, 0, 0, time.UTC) // 周一 n := 5 count := 0 d := start dir := 1 if n < 0 { dir = -1 } for count < abs(n) { d = d.AddDate(0, 0, dir) if d.Weekday() != time.Saturday && d.Weekday() != time.Sunday { count++ } } fmt.Printf("%s 后 %d 个工作日: %s\n", start.Format("2006-01-02"), n, d.Format("2006-01-02")) // 输出: 2024-01-15 后 5 个工作日: 2024-01-22 } func abs(x int) int { if x < 0 { return -x } return x }
#!/bin/bash # 起始日±N工作日(依赖 date 命令) start="2024-01-15" n=5 count=0 d=$(date -d "$start" +%s) dir=1 [ "$n" -lt 0 ] && dir=-1 while [ $count -lt ${n#-} ]; do d=$((d + dir * 86400)) weekday=$(date -d "@$d" +%u) if [ "$weekday" -le 5 ]; then ((count++)) fi done result=$(date -d "@$d" +%Y-%m-%d) echo "$start 后 $n 个工作日: $result" # 输出: 2024-01-15 后 5 个工作日: 2024-01-22
import java.time.LocalDate; import java.time.DayOfWeek; public class WorkdayCalc { public static void main(String[] args) { LocalDate start = LocalDate.of(2024, 1, 15); // 周一 int n = 5; int count = 0; LocalDate d = start; int dir = n > 0 ? 1 : -1; while (count < Math.abs(n)) { d = d.plusDays(dir); if (d.getDayOfWeek() != DayOfWeek.SATURDAY && d.getDayOfWeek() != DayOfWeek.SUNDAY) { count++; } } System.out.println(start + " 后 " + n + " 个工作日: " + d); // 输出: 2024-01-15 后 5 个工作日: 2024-01-22 } }
第五节

常见问题

Q & A
周末和法定节假日算不算工作日?

本工具采用中国标准工作日定义:周一至周五为工作日,周六、周日及国务院公布的法定节假日(元旦、春节、清明、劳动节、端午、中秋、国庆)不计入。计算区间内工作日数时,工具会自动跳过这些日期,无需手动排除。如果需要自定义节假日(如公司内部调休),目前版本暂不支持,建议手动核对结果。

输入起始日之后,加 5 个工作日,为什么出来的日期不是第 5 天?

因为「加 N 个工作日」的意思是跳过周末和法定节假日后的第 N 个工作日。例如周五加 1 个工作日,结果是下周一,而不是周六。工具在计算时会逐日跳过非工作日,所以出来的日期一定落在工作日上,不会出现周六或周日。如果结果看起来「跳过了很多天」,说明中间有多个节假日或周末。

计算区间内工作日数时,起始日和结束日算不算在内?

本工具采用「包含起始日,不包含结束日」的规则。例如从周一(1号)到周四(4号),区间内工作日为周一、周二、周三共 3 天,周四不算。如果需要两端都算,请将结束日改为次日。结果区会显示「起始日 → 结束日(不含结束日)」的提示,避免混淆。

为什么我手动数的工作日数和工具算的不一样?

常见原因:① 法定节假日漏算,例如清明当天虽然是周二,但工具会跳过,手动数可能没减掉;② 起始日或结束日是否包含的规则不一致,本工具不包含结束日;③ 时区影响,如果输入日期是在 UTC 时间下,而工具按本地时区显示,可能差一天。建议先核对起始日和结束日是否准确,再确认是否遗漏了法定节假日。

这个工具需要联网吗?能在公司内网用吗?

本工具完全在浏览器本地运行,所有计算代码(JavaScript)都在前端执行,不向服务器发送任何数据。因此不需要联网,断网环境下也能正常使用。公司内网、无互联网权限的电脑均可直接打开页面使用,无需安装任何软件。

能算跨年或跨长假的工作日吗?比如春节前后一个月?

可以。工具支持任意日期范围,跨年、跨春节、跨国庆长假都能正确计算。底层算法内置了 2000-2099 年的中国法定节假日数据库,包括春节调休、国庆调休等复杂情况。输入起始日和结束日,系统会自动跳过所有法定节假日和周末,无需手动分段。

输入日期时格式写错了,比如 2024/1/1 和 2024-01-01 都能识别吗?

支持常见日期格式:YYYY-MM-DD、YYYY/MM/DD、YYYY.MM.DD、DD/MM/YYYY(需注意日/月/年顺序可能被误读)。如果输入无法识别,输入框会高亮提示,结果区不会显示。建议优先使用「YYYY-MM-DD」格式,歧义最少。如果月份和日期颠倒(如 01/02 表示 1 月 2 日还是 2 月 1 日),工具会按 YYYY-MM-DD 优先解析,不确定时请直接点日期选择器。

结果里的「总天数」和「工作日数」有什么区别?

「总天数」是起始日到结束日(不含结束日)的日历天数,包含所有周末和节假日;「工作日数」是只算周一至周五且跳过法定节假日的天数。例如从 9 月 30 日(周一)到 10 月 8 日(周二),总天数是 8 天,但中间有国庆假期(10/1-10/7),所以工作日数只有 2 天(9/30 和 10/8)。两个数字对比能直观看出假期占了多少。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭