合同交付日核验
法务审核合同时,条款写着「乙方应于甲方发出书面通知后 15 个工作日内完成交付」。通知日是 3 月 20 日,但中间夹着清明节和五一调休。人工数日历怕漏算调休日,用本工具输入起始日与 15 个工作日,直接得到准确的截止日期,避免因日期计算失误导致合同违约。
合同里写着‘审批通过后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 公式 | 逐日数,耗时长易错 |
| 节假日适配 | 内置中国法定节假日规则 | 需手动维护节假日列表 | 依赖个人记忆 |
| 区间计算 | 支持区间内工作日数统计 | 需嵌套公式实现 | 逐日判断,效率极低 |
| 学习成本 | 零学习,打开即用 | 需了解函数语法及参数 | 无学习成本但繁琐 |
| 输入 | 输出 | 说明 |
|---|---|---|
| 起始日 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 为界。跨时区用户若在深夜操作,工具显示的「今天」可能与当地日历日期不同。
工作日数 = ∑_{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 天。
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-22package 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-22import 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
}
}本工具采用中国标准工作日定义:周一至周五为工作日,周六、周日及国务院公布的法定节假日(元旦、春节、清明、劳动节、端午、中秋、国庆)不计入。计算区间内工作日数时,工具会自动跳过这些日期,无需手动排除。如果需要自定义节假日(如公司内部调休),目前版本暂不支持,建议手动核对结果。
因为「加 N 个工作日」的意思是跳过周末和法定节假日后的第 N 个工作日。例如周五加 1 个工作日,结果是下周一,而不是周六。工具在计算时会逐日跳过非工作日,所以出来的日期一定落在工作日上,不会出现周六或周日。如果结果看起来「跳过了很多天」,说明中间有多个节假日或周末。
本工具采用「包含起始日,不包含结束日」的规则。例如从周一(1号)到周四(4号),区间内工作日为周一、周二、周三共 3 天,周四不算。如果需要两端都算,请将结束日改为次日。结果区会显示「起始日 → 结束日(不含结束日)」的提示,避免混淆。
常见原因:① 法定节假日漏算,例如清明当天虽然是周二,但工具会跳过,手动数可能没减掉;② 起始日或结束日是否包含的规则不一致,本工具不包含结束日;③ 时区影响,如果输入日期是在 UTC 时间下,而工具按本地时区显示,可能差一天。建议先核对起始日和结束日是否准确,再确认是否遗漏了法定节假日。
本工具完全在浏览器本地运行,所有计算代码(JavaScript)都在前端执行,不向服务器发送任何数据。因此不需要联网,断网环境下也能正常使用。公司内网、无互联网权限的电脑均可直接打开页面使用,无需安装任何软件。
可以。工具支持任意日期范围,跨年、跨春节、跨国庆长假都能正确计算。底层算法内置了 2000-2099 年的中国法定节假日数据库,包括春节调休、国庆调休等复杂情况。输入起始日和结束日,系统会自动跳过所有法定节假日和周末,无需手动分段。
支持常见日期格式: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)。两个数字对比能直观看出假期占了多少。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。