中国调休补班,所有节假日 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

posted @ 2026-08-11 10:06  我要去巴黎  阅读(1)  评论(0)    收藏  举报