项目排期为什么总超:人日不等于工期,2026 年只有 248 个工作日,春节那个月只有 16 天

· 约 7 分钟 🗓️ 时间计算

“这个需求大概 60 人日。” “那我们投 2 个人,一个月能上线吧?”

这段对话每天都在发生,而它几乎必然导致延期。因为从”60 人日”到”一个月上线”,中间隔着两次换算,每一次都会把日期往后推。

三个量,别混着说

英文含义谁关心
人日effort一个人干一天的工作量报价、成本核算
工期duration项目占用多少个工作日排期、资源调度
日历日calendar days跨过多少个自然天客户、老板、合同

报价谈的是第一个,客户关心的是第三个。排期这件事的全部内容,就是把第一个换算成第三个

第一次换算:人日 → 工作日

公式很简单,难的是里面那个系数:

工期(工作日)= 总人日 ÷ 有效人数 ÷ 投入系数

投入系数是这里唯一有争议的数。一个人一天名义上 8 小时,但真正能投在这个项目上的时间要扣掉:

  • 站会、评审会、跨部门对齐会
  • 线上问题排查、答疑、支持
  • 手上还没交接完的上一个项目
  • 上下文切换——同时推两件事时,切换本身就有成本,两件事各投一半时间的产出,明显低于分别全投

常见的取值区间:

团队状态投入系数
全职专注、需求冻结、不接支持0.75 – 0.8
正常项目节奏、少量支持工作0.65 – 0.75
同时维护线上系统、需求边做边定0.5 – 0.6
多项目并行、频繁被打断0.4 – 0.5

取值方法比取值本身重要。 翻出上一个已完成的项目,用实际投入人日除以实际工作日和人数,倒推出真实系数——这个数字通常比团队里所有人的直觉都低。没有历史数据的新团队先用 0.65,跑两个迭代后校准。

回到开头那个例子:

60 人日 ÷ 2 人 ÷ 0.7 ≈ 43 个工作日

不是 30 天,是 43 个工作日。而 43 个工作日还不是 43 天。

第二次换算:工作日 → 日历日

这一步取决于项目落在一年中的哪个位置。2026 年全年只有 248 个工作日,但它们在月份之间的分布很不均匀:

月份工作日备注
1 月21元旦 3 天假(1/1–1/3),1 天调休补班
2 月16春节 2/15–2/23 放 9 天,2 天调休补班
3 月22无假期,全年产能最好的月份之一
4 月21清明 4/4–4/6
5 月19劳动节 5/1–5/5 放 5 天,1 天调休补班
6 月21端午 6/19–6/21
7 月23无假期,全年工作日最多
8 月21无假期
9 月22中秋 9/25–9/27,1 天调休补班
10 月18国庆 10/1–10/7 放 7 天,1 天调休补班
11 月21无假期
12 月23无假期,赶年底交付的黄金月

(数据依据国务院办公厅年度放假安排,与 时间计算 工具内置的口径一致。作为对照:2024 年 251 个工作日,2025 年 248 个。)

最直接的三条结论

  1. 7 月和 12 月的产能比 2 月高 40%以上(23 天 vs 16 天)。同样一个”一个月的活”,排在 2 月和排在 7 月完全是两码事。
  2. 跨春节的项目要单独评估。除了 2 月本身只有 16 个工作日,节前一周和节后一周的实际产出也明显下滑——人在,心思不一定在。保守做法是在春节前后各加两三天缓冲。
  3. 平均每月约 20.7 个工作日(248 ÷ 12)。“一人月”这个单位在国内大致等于 20 到 21 人日,不是 22,更不是 30。

所以那 43 个工作日跨多少自然天?拿 2026 年不同的启动日实算一遍:

启动日43 个工作日后自然日跨度撞上什么
2026-11-022026-12-3159 天什么都没撞,全年最顺
2026-06-012026-07-3160 天无假期
2026-01-192026-03-2565 天跨春节
2026-08-032026-10-0866 天撞国庆 7 天假

同样 43 个工作日的工作量,启动时间不同,自然日跨度能差出一周。 差距看起来不大是因为调休补班把假期”还”回来了一部分——但这一周往往正好是交付前最要命的一周。而春节的真实影响还要更大:节前一周和节后一周的实际产出会明显下滑,这部分不体现在工作日数里,需要额外留缓冲。

“30 个工作日”这句话有三种理解

合同里最常见的表述,也是最常见的争议来源。

口径定义30 个工作日跨多少自然日
日历工作日只算周一到周五,不管节假日42 天(固定)
扣法定假日周一到周五减去法定假日44 – 52 天(看撞上哪些假)
中国式工作日扣假日后再加回调休补班的周六周日43 – 50 天

第三种是国内实务和本工具采用的口径:

工作日 = 周一至周五
       − 法定节假日(含调休连休的部分)
       + 周六周日的调休补班日

2026 年有 6 个调休补班日(1 月、5 月、9 月、10 月各 1 天,2 月 2 天)——这些周末是要上班的,按国际口径算就会白白少算 6 天。

签合同时的建议写法:约定”工作日以国务院办公厅公布的年度放假安排为准,调休补班日计为工作日”,并在附件里附上按这个口径算出的具体交付日期。双方对着一个确定的日子签字,比对着一个数字签字安全得多——数字可以有三种理解,日期只有一种。

缓冲:别摊到每个任务里

排期估不准是常态,所以要留缓冲。问题是留多少、留在哪。

拍脑袋乘 1.5 的毛病:把所有任务一视同仁。“改个文案”和”对接一个没写过文档的第三方接口”,不确定性差了一个数量级,用同一个系数显然不对。

PERT 三点估算给每个任务估三个值:

乐观 O    ── 一切顺利
最可能 M  ── 正常情况
悲观 P    ── 该踩的坑都踩了

期望值   E = (O + 4M + P) ÷ 6
标准差   σ = (P − O) ÷ 6

举例,一个接口对接任务:O = 2 天,M = 4 天,P = 10 天。

E = (2 + 4×4 + 10) ÷ 6 = 4.67 天
σ = (10 − 2) ÷ 6 = 1.33 天

关键一步:缓冲不要摊到每个任务上。

摊进去的缓冲会被帕金森定律吃掉——工作总会填满所有可用的时间。任务估 6 天(4.67 + 缓冲),基本不可能 4 天做完,因为没人会提前交。

正确做法是:每个任务按期望值 E 排,所有 σ 平方求和再开方,作为项目级的统一缓冲放在末尾

项目缓冲 = √(σ₁² + σ₂² + … + σₙ²)

比如 9 个任务每个 σ 都是 1.33 天:

  • 各任务缓冲之和:9 × 1.33 = 12 天
  • 平方和开方:√(9 × 1.33²) = 4 天

总缓冲少了三分之二,防护效果反而更好——因为不是所有任务都会同时踩坑,风险在项目层面互相抵消了一部分。这也是关键链方法的核心思路。

延期之后:加人为什么救不回来

项目过半发现要延期,最本能的反应是加人。但新人进来要先理解需求、熟悉代码、配环境,这段时间不但不产出,还要占用老成员的时间来带——短期内团队的有效产能是下降的。

三条实务建议:

  1. 只在项目早期加人。过了中点之后加人,基本只会让事情更糟。
  2. 加人不如减范围。把非核心需求挪到下一期,是唯一能立刻见效的手段。
  3. 必须加人时按 0.5 的系数计入产能,同时给带人的老成员也扣掉相应的投入系数——不然算出来的新工期还是虚的。

完整走一遍

一个真实节奏的例子:

需求拆解 → 12 个任务,三点估算得总人日 62、项目缓冲 5 天
团队      → 2 人全投 + 1 人半投 = 有效 2.5 人
投入系数  → 团队历史值 0.7

工期 = 62 ÷ 2.5 ÷ 0.7 ≈ 35.4 → 取 36 个工作日
加缓冲 = 36 + 5 = 41 个工作日

用「N 工作日后」模式:2026-09-01 起算 41 个工作日
  → 工具扣掉中秋 3 天、国庆 7 天,加回 2 个调休补班日
  → 交付日 2026-11-03

用「区间工作日数」模式反查 2026-09-01 到 2026-11-03:
  → 总天数 64、法定节假日 10、周末 12、调休补班 2 → 工作日 42

这里的 42 和 41 差的那一天不是算错,而是两种模式的口径不同:“N 工作日后”从启动日的次日开始数,区间统计则包含启动日和交付日两端。反查时把这一天减掉再对,或者干脆把启动日当作”启动会那天”,本来也不产出。

给客户的承诺是 “2026 年 11 月 3 日”,不是 “41 个工作日”。

常见错误清单

错误后果
把人日直接当天数用工期少估 30% 以上
投入系数取 1.0假设每人每天 8 小时全在写这个项目的代码
一人月按 22 天算2026 年平均只有 20.7 天,春节月只有 16 天
用 Excel 的 NETWORKDAYS 算国内工期不认中国法定假日,也不认调休补班,两头都错
缓冲摊到每个任务被帕金森定律吃掉,等于没留
合同只写”30 个工作日”三种口径能差出十天以上
跨年项目按今年的调休估次年次年安排要到十一二月才公布,误差 3 到 5 天
延期后靠加人补救短期产能反而下降

相关

总结

  • 人日是投入量,工期是时间跨度,日历日才是客户听得懂的东西,排期就是把第一个换算成第三个
  • 投入系数是排期最大的变量,取团队历史值,没有就先用 0.65,绝不要用 1.0
  • 2026 年 248 个工作日,分布极不均匀:7 月和 12 月各 23 天,2 月只有 16 天,10 月只有 18 天
  • 一人月约等于 20 到 21 人日,不是 22,更不是 30
  • 缓冲用 PERT 算,放在项目末尾,平方和开方通常只有各任务缓冲之和的三分之一,防护却更好
  • 对外永远承诺具体日期而不是天数——“41 个工作日”能有三种理解,“11 月 3 日”只有一种

❓ 常见问题

报价 60 人日,投 2 个人,为什么不是 30 天交付?

因为中间还差两次换算。第一次:人日是投入量,工期是时间跨度,两者之间隔着投入系数——一个人一天名义上 8 小时,实际能投在这个项目上的往往只有 5 到 6 小时(会议、线上支持、别的项目、上下文切换都要扣)。按 0.7 的投入系数算,60 人日 ÷ 2 人 ÷ 0.7 ≈ 43 个工作日。第二次:工作日不是日历日,43 个工作日跨过的自然天数要看落在哪几个月——落在 7 月大约 60 个自然日,跨春节的话可能要 70 天以上。60 人日投 2 个人,实际交付跨度通常在两个月上下,而不是 30 天。

投入系数该取多少?有没有经验值?

没有普适值,只有自己团队的历史值。常见的取值区间是 0.6 到 0.8:全职专注、不接支持、需求已冻结的团队能到 0.8;同时维护线上系统、要参加多个项目例会、需求边做边定的团队常常只有 0.5 到 0.6。取值方法比取值本身重要:翻出上一个已完成项目,用实际投入的人日除以实际跨过的工作日和人数,倒推出真实系数——这个数字通常比所有人的直觉都低。新团队没有历史数据时先用 0.65,跑两个迭代后校准。切忌用 1.0,那等于假设每个人每天 8 小时全在敲这个项目的代码。

合同里写“30 个工作日交付”,甲乙双方能差出多少天?

最多能差十天以上,取决于三种口径中的哪一种口径一(日历工作日):只算周一到周五,不管节假日——30 个这样的日子跨 42 个自然日。口径二(扣法定节假日):周一到周五减去法定假日,遇上国庆或春节,30 个工作日可能跨 50 天以上。口径三(中国式工作日):扣假日之后还要把调休补班的周六周日加回来——这是本工具和国内实务的口径。签合同时必须写清楚:建议直接约定"工作日以国务院办公厅公布的年度放假安排为准,调休补班日计为工作日",并在附件里附上按这个口径算出的具体交付日期,双方对着一个确定的日子签字,比对着一个数字签字安全得多。

跨年的项目怎么算?次年的调休还没公布怎么办?

分段算,年底校准。国务院办公厅的次年放假安排通常在前一年的十一月到十二月才发布,在此之前次年的调休是未知的。做法是三段:(1)截至今年底用已知的节假日数据精算;(2)次年部分按经验值估算——全年 248 到 251 个工作日、平均每月约 20.7 个,春节所在月只有 16 到 18 天;(3)等次年安排公布后立刻重算一次,把误差暴露在项目早期而不是交付前一周。合同层面:跨年项目务必写"以国务院公布的放假安排为准",否则一旦次年调休和估算差出三五天,责任归属会扯不清。

项目延期了,加人能追回来吗?

能追回一部分,但远不是线性的,而且加得越晚越无效。新人进来要先花时间理解需求、熟悉代码、配环境,这段时间不但不产出,还要占用老成员的时间来带——短期内团队的有效产能是下降的。经验做法:(1)只在项目早期加人,过了中点之后加人基本只会让事情更糟;(2)加人不如减范围——把非核心需求挪到下一期,是唯一能立刻见效的手段;(3)如果必须加人,按 0.5 的系数计入产能,并且给带人的老成员也扣掉相应的投入系数。真正该做的是在排期时就留够缓冲,而不是延期后靠加人补救。

缓冲该留多少?直接乘 1.5 行不行?

乘系数能用但很粗,更好的做法是三点估算。拍脑袋乘 1.2 到 1.5 的问题在于:它把所有任务一视同仁,而实际上不确定性差别巨大——"改个文案"和"对接一个没写过文档的第三方接口"不该用同一个系数。PERT 三点估算给每个任务估三个值:乐观 O、最可能 M、悲观 P,期望值 E = (O + 4M + P) ÷ 6,标准差 σ = (P − O) ÷ 6关键在于缓冲不要摊到每个任务上——摊进去的缓冲会被帕金森定律吃掉(工作总会填满可用的时间)。正确做法是每个任务用期望值 E 排,把所有 σ 平方求和再开方,作为项目级的统一缓冲放在末尾。这样算出的总缓冲通常明显小于各任务缓冲之和,而防护效果更好。

🗓️ 打开 时间计算 日期差值 · 加减推算 · 工作日/节假日

📖 同一工具的其他教程

🔗 相关阅读

全部教程 →