中国调休补班,所有节假日 API 都搞错了
每年春节前,后端开发群都会准时出现同一个问题:
"今年 2 月 14 号到底是上班还是不上班?"
答案是:上班。因为这是春节调休的补班日——一个周六,但你要去公司。
问题出在哪
市面上主流的节假日 API(Calendarific、HolidayAPI.com、Abstract API、Nager.Date)都覆盖了 200+ 国家的法定假日。但它们处理中国节假日时有一个共同的盲区:
它们只返回法定假日,不处理调休补班。
2026 年中国的放假安排(来源:国务院办公厅 2025-11-04 通知):
元旦:1月1日-3日 放假3天,1月4日(周日)上班
春节:2月15日-23日 放假9天,2月14日(周六)和2月28日(周六)上班
劳动节:5月1日-5日 放假5天,5月9日(周六)上班
国庆节:10月1日-7日 放假7天,9月20日(周日)和10月10日(周六)上班
这意味着 2026 年有 6 天周末需要上班。如果你用主流 API 查 2026-02-14:
// 其他 API 的返回
{"date": "2026-02-14", "weekday": "Saturday", "type": "weekend"}
// 错误!这天是调休补班,要上班的
// 正确的返回应该是
{"date": "2026-02-14", "weekday": "周六", "type": "adjusted_workday", "is_workday": true}
如果你的业务涉及排班、考勤、订单预计送达时间、定时任务判断——这个错误会导致:
- 调休补班日没有排班,导致空岗
- 考勤系统把补班日标记为缺勤
- 订单 ETA 多算一天
- 定时任务在补班日不该执行却执行了
我做了一个解决这个问题的 API
我在 RapidAPI 上上架了一个 Global Holidays API,覆盖 501 个国家/地区法定假日,加上了中国调休补班的独家数据。
数据来源:国务院办公厅年度通知,手动维护,精确到每一天。
核心能力
| 功能 | 说明 | 其他 API 有吗 |
|---|---|---|
| 中国调休补班 | 周末补班日正确返回 is_workday: true | 独家 |
| 工作日判断 | 一个接口判断某天是否工作日(含调休逻辑) | 部分有 |
| 501 国家覆盖 | 基于 python-holidays 开源库 | 类似 |
| 美国州级假日 | 57 个州/领地的独立假日 | 付费才有 |
| 日期区间分析 | 输入起止日期,返回工作日/假日/周末天数 | 少见 |
| 下一个假日 | 查某国下一个法定假日是哪天 | 少见 |
用法(Python)
import requests
# 你的 RapidAPI API Key
API_KEY = "your_rapidapi_key"
headers = {
"X-RapidAPI-Key": API_KEY,
"X-RapidAPI-Host": "global-holidays-api3.p.rapidapi.com"
}
# 1. 判断 2026-02-14 是否工作日
resp = requests.get(
"https://global-holidays-api3.p.rapidapi.com/is-workday/CN/2026-02-14",
headers=headers
)
print(resp.json())
# {"date": "2026-02-14", "weekday": "周六", "type": "adjusted_workday",
# "name": "调休补班", "is_workday": true, "source": "china_override"}
# 2. 查 2026 年中国所有调休补班日
resp = requests.get(
"https://global-holidays-api3.p.rapidapi.com/china/adjusted-workdays/2026",
headers=headers
)
print(resp.json())
# {"count": 6, "adjusted_workdays": [
# {"date": "2026-01-04", "name": "调休补班", "weekday": "周日"},
# {"date": "2026-02-14", "name": "调休补班", "weekday": "周六"},
# {"date": "2026-02-28", "name": "调休补班", "weekday": "周六"},
# {"date": "2026-05-09", "name": "调休补班", "weekday": "周六"},
# {"date": "2026-09-20", "name": "调休补班", "weekday": "周日"},
# {"date": "2026-10-10", "name": "调休补班", "weekday": "周六"},
# ]}
# 3. 查一个日期区间内有多少工作日
resp = requests.get(
"https://global-holidays-api3.p.rapidapi.com/date-range/CN",
headers=headers,
params={"start": "2026-02-12", "end": "2026-02-17"}
)
print(resp.json()["workdays"]) # 2
用法(cURL)
# 判断 2026-02-14 是否工作日
curl "https://global-holidays-api3.p.rapidapi.com/is-workday/CN/2026-02-14" \
-H "X-RapidAPI-Key: your_key" \
-H "X-RapidAPI-Host: global-holidays-api3.p.rapidapi.com"
# 查美国加州假日(州级,含 Cesar Chavez Day、Diwali 等)
curl "https://global-holidays-api3.p.rapidapi.com/holidays/US/2026?subdiv=CA" \
-H "X-RapidAPI-Key: your_key" \
-H "X-RapidAPI-Host: global-holidays-api3.p.rapidapi.com"
实际场景
场景 1:考勤系统
result = client.is_workday("CN", "2026-02-14")
if result["is_workday"]:
# 今天要上班,开启打卡
pass
else:
# 今天放假
pass
场景 2:订单 ETA 计算
result = client.date_range("CN", start="2026-02-12", end="2026-02-18")
workdays = result["workdays"] # 算出实际工作日天数
场景 3:定时任务跳过假日
result = client.is_workday("CN", "2026-02-16")
if not result["is_workday"]:
continue # 今天是假日,跳过
do_daily_task()
和竞品对比
| 本 API | Calendarific | HolidayAPI.com | Abstract API | |
|---|---|---|---|---|
| 国家覆盖 | 501 | 230+ | 250 | 190+ |
| 中国调休补班 | 独家 | 无 | 无 | 无 |
| 美国州级 | 免费含 | 付费 | $399/年 | 付费 |
| 工作日判断 | 有 | 无 | 无 | 部分 |
| 日期区间分析 | 有 | 无 | 无 | 无 |
| 免费额度 | 1000次/月 | 500次/月 | 1000次/月 | 1000次/月 |
| 最低付费 | $10/月 | $8.3/月 | $20.75/月 | $99/月 |
定价
| 套餐 | 月价 | 配额 |
|---|---|---|
| Basic | 免费 | 1,000 次/月 |
| Pro 推荐 | $10/月 | 10,000 次/月 |
| Ultra | $25/月 | 50,000 次/月 |
| Mega | $100/月 | 500,000 次/月 |
注册即送免费额度,不绑信用卡也能用。在 RapidAPI 搜索 Global Holidays API 即可找到:https://rapidapi.com/cdd3544/api/global-holidays-api3

浙公网安备 33010602011771号