节假日 API · 免费法定节假日接口与调休 JSON

加载中…

反馈问题操作选接口与年份或日期,点「发送请求」看返回的 JSON

猜你喜欢

免费的法定节假日接口:一个地址取一整年的放假日与调休上班日,返回 JSON,支持跨域,不用注册、不用申请密钥;另有按日期查询的接口,直接告诉你这一天是法定节假日、调休上班日、周末还是普通工作日。数据依据国务院办公厅历年放假通知,从 2016 年起,下一年的安排公布后自动更新。页面上能在线试请求、复制 curl、JavaScript、Python 调用示例;不写代码的人也能把放假和调休一键订阅到苹果、谷歌、Outlook 日历。

怎么用

这一页是 Hi8 的节假日 API说明,也是一个能在线试请求的小工具。打开页面,最上面那张卡片就是单日接口对今天的真实返回:今天上班还是休息、为什么。

三个接口地址

全部是 GET 请求,返回 JSON,地址里把 YYYY 换成年份、YYYY-MM-DD 换成日期:

  • 按年取:https://hi8.com/api/holiday/YYYY.json,返回这一年全部法定节假日放假日和调休上班日,是最常用的那个,接进自己系统时一年取一次就够。
  • 按日期取:https://hi8.com/api/holiday/date/YYYY-MM-DD.json,直接告诉你这一天是法定节假日、调休上班日、周末还是普通工作日,适合「今天上不上班」这类提醒和机器人。
  • 年份清单:https://hi8.com/api/holiday/years.json,列出接口里有哪些年份、每一年的安排公布了没有、最近一次同步的时间。

不用注册、不用密钥、允许跨域,浏览器前端和服务端都能直接调。另有一份 OpenAPI 描述 https://hi8.com/api/holiday/openapi.json,可以导入 Postman、Apifox,或交给代码生成器、AI 助手直接读。

订阅到手机日历

不写代码也能用:日历订阅地址 https://hi8.com/api/holiday/cn.ics 把 2016 年以来的每个假期做成一条全天事件,调休上班日单独一条。苹果手机、苹果电脑和 Outlook 点页面上的「一键订阅」即可;谷歌日历在网页版「其他日历 → 通过网址添加」里粘贴地址。日历软件会定期自己刷新,明年的放假安排公布后会自动出现在日历里。

在线试一下

在「在线试一下」那一栏选接口,按年取就选年份,按日期取就选日期,点「发送请求」,下面会显示完整的请求地址、HTTP 状态码和返回的 JSON;按年取时还会顺带算出这一年放假几天、调休上班几天。返回的 JSON 可以一键复制,也可以点「新窗口打开」看原始返回。

调用示例

「调用示例」那一栏有 curl、JavaScript、Python 三段能直接跑的代码,地址里的年份和日期已经按今天填好。Python 那段在请求头里带了 User-Agent,这一行别删:Python 自带的 urllib 用默认标识会被拦下,返回 403。JavaScript 那段演示了最常见的用法:取一整年的数据,做成两个集合,再写一个判断某天是不是工作日的函数——先看是不是调休上班日,再看是不是法定节假日,最后才看星期几。这个顺序不能反:调休上班日多半是周末,只看星期会判错。

使用条件

免费,请在用了这份数据的页面上署名并链接到本页。页面底部有一行现成的署名代码,复制后贴进页脚即可。内部系统、命令行脚本这类没有公开页面的用法,在项目说明或代码注释里注明数据来源就行。

怎么看结果

按年取的字段

字段 含义
year 年份
published 这一年的放假安排公布了没有;没公布时为 false,days 为空数组
updated 最近一次同步数据的时间(UTC,ISO 8601 格式)
days 按日期升序的列表,每项是 { date, name, isOffDay }
days[].date 日期,YYYY-MM-DD
days[].name 所属节日,比如春节、国庆节;调休上班日也写是因为哪个节日调休
days[].isOffDay true=法定节假日放假,false=调休上班
papers 这一年国务院办公厅放假通知原文的链接
license、doc 使用条件与本页地址

没出现在 days 里的日子按普通星期算:周一到周五上班,周六周日休息。所以判断某一天时,先查 days,查不到再看星期几。

元旦的放假安排常常跨年,比如上一年的 12 月底就开始放。接口按日期所在的年份归档:上一年 12 月底那一两天出现在上一年的返回里,不会混进下一年。

按日期取的字段

字段 含义
date 查询的日期
weekday 星期几,周一为 1、周日为 7
type holiday=法定节假日,makeup=调休上班,weekend=普通周末,weekday=普通工作日
isOffDay、isWorkday 这一天休息还是上班,两者相反
name 节日名;普通周末和工作日为 null
published 这一年的安排公布了没有;没公布时只按星期判断

状态码

  • 200:正常返回。还没公布的年份也是 200,看 published。
  • 400:日期写错了,比如二月三十日。
  • 404:年份超出范围(早于 2016 年或晚于明年),返回里带可查的最早和最晚年份。
  • 403:多半是 Python 自带的 urllib 没带 User-Agent,加上即可。
  • 429:一分钟内请求超过 60 次,按 Retry-After 等一分钟再试。

常见问题

数据多久更新一次?

后台每年 9 月到 12 月每天核对一次,其余月份每周核对一次。国务院办公厅公布下一年的安排后,通常一两天内就能从接口取到;今年、明年和年份清单缓存一小时,已经过去的年份缓存一天。数据进库前要过一遍校验:日期不合法、条目重复、数量异常的年份整年丢弃,保留旧数据;拉到空数据也不会覆盖已有的安排。

这些数据我自己就能整理,为什么用接口?

每年手动抄一遍放假通知容易漏掉调休上班日,跨年的元旦更容易算错年份;而且下一年的安排什么时候公布不固定,靠人盯总会晚。接口把 2016 年以来每一年的数据整理成同一种格式,公布后自动更新,程序里写一次就不用管了。

能不能离线用?

能。按年取的返回只有几 KB,可以每年取一次存成本地文件,或者打包进自己的程序。只是记得在明年的安排公布后再取一次。

想看结果而不是写代码?

直接用站里的几个工具页,数据是同一份:

  • 算两个日期之间有几个工作日、往后推 N 个工作日,用工作日计算器;
  • 看今天、这个周末上不上班,用调休查询;
  • 看今年每个假期放几天、哪天补班,用放假安排;
  • 要一张带「休」「班」标记、能打印的全年表,用全年日历;
  • 查农历、黄历和节日倒计时,用万年历。

原理与冷知识

法定节假日与调休是怎么来的

全体公民放假的节日及天数由《全国年节及纪念日放假办法》规定,每年具体哪几天放、哪个周末要补班,由国务院办公厅在上一年年底前后发通知安排。调休的做法是把相邻周末的休息日挪到节日旁边,拼成连续的长假,挪走的那天在别的日子补回来,于是有了「周六要上班」。具体以现行规定和当年通知为准。

为什么判断工作日不能只看星期

一年里通常有几天调休上班日落在周末,又有十几天法定假日落在周一到周五。只按星期判断,一年会错二三十天。程序里最稳的写法就是上面示例里的顺序:先查调休上班,再查法定放假,最后才看星期。

关于数据来源

接口的数据依据国务院办公厅历年发布的部分节假日安排通知,经开源项目 holiday-cn 整理;Hi8 每天同步、逐条校验后存进数据库,再按年、按日期两种形状提供出来。2016 年到 2023 年的安排是一次性导入的历史数据,之后的年份由后台自动同步。

English summary

A free API for mainland China’s statutory public holidays and make-up workdays (调休), based on the State Council’s annual notices, from 2016 onward. No sign-up, no API key, HTTPS, CORS enabled (Access-Control-Allow-Origin: *).

  • By year: GET https://hi8.com/api/holiday/2026.json returns days[], each { date, name, isOffDay }. isOffDay: true is a public holiday, false is a make-up workday (usually a Saturday or Sunday). Days not listed follow the normal week: Monday to Friday work, weekends off. Before next year’s schedule is published, the response is 200 with published: false and an empty days.
  • By date: GET https://hi8.com/api/holiday/date/2026-10-01.json returns type (holiday, makeup, weekend or weekday), isOffDay, isWorkday and the holiday name.
  • Years: GET https://hi8.com/api/holiday/years.json lists available years and whether each is published.
  • Calendar feed: https://hi8.com/api/holiday/cn.ics (iCalendar, subscribe in Apple, Google or Outlook Calendar).
  • OpenAPI: https://hi8.com/api/holiday/openapi.json.

Status codes: 400 for an invalid date, 404 for a year outside the range (2016 to next year), 429 above 60 requests per minute per IP. Next year’s schedule is picked up automatically, usually within a day or two of publication. Terms: free for personal and commercial use; please credit with a link to this page, e.g. <a href="https://hi8.com/t/jiejiari-api">Holiday data from Hi8</a>.

更多问答

这个节假日 API 收费吗?要不要申请密钥?

免费,不用注册、不用申请密钥,直接请求地址就能拿到 JSON。唯一的使用条件是在用了这份数据的页面上署名并链接到本页,比如在页脚放一行「节假日数据来自 Hi8」的链接,页面上有现成的署名代码可以复制。个人项目、公司内部系统、商业网站都可以用。

接口返回的 isOffDay 是什么意思?调休上班怎么表示?

isOffDay 为 true 表示这一天是法定节假日放假,为 false 表示这一天是调休上班日(通常是周六或周日被安排成工作日)。按年取的接口只列这两类日子,没列出来的日子按普通星期算:周一到周五上班,周六周日休息。name 字段是这一天所属的节日名,调休上班日也带上是因为哪个节日调休。

明年的放假安排什么时候能取到?

下一年的放假安排一般在上一年的十月底到十二月由国务院办公厅公布。公布之前请求明年的地址,接口照常回 200,但 published 是 false、days 是空数组,你的程序可以据此判断「还没公布」,隔几天再取。公布之后通常一两天内就能从接口取到,不用改任何代码。

有没有调用次数限制?可以在前端直接调吗?

每个 IP 每分钟最多 60 次,超过会回 429 状态码,等一分钟再试即可。接口允许跨域,浏览器前端可以直接请求。不过一年的数据很少变化,建议在自己的服务端或浏览器里缓存一天,不要每次打开页面都请求一遍,这样既快又不会碰到限制。

数据从哪里来?准不准?

依据国务院办公厅每年发布的部分节假日安排通知,经开源项目 holiday-cn 整理,后台每天自动同步并逐条校验格式,校验不过的年份保留旧数据不覆盖。每一年的返回里都带 papers 字段,列出那一年通知原文的链接,可以自己点进去核对。各单位另外安排的值班、轮休不在数据里,以单位通知为准。

能不能把放假和调休加进手机日历?

能。订阅地址是 https://hi8.com/api/holiday/cn.ics,苹果手机、苹果电脑和 Outlook 点页面上的「一键订阅」就行;谷歌日历在网页版「其他日历 → 通过网址添加」里粘贴这个地址。订阅后每个假期显示为一条全天事件,调休上班日单独一条,明年的安排公布后日历自动更新,不用重新订阅。

Python 请求返回 403 是怎么回事?

Python 自带的 urllib 不带 User-Agent 时用的是默认标识,会被网站的防护拦下,返回 403、内容是 error code 1010。在请求头里随便带一个 User-Agent(比如 my-app/1.0)就好了,页面上的 Python 示例已经这样写;用 requests 库、curl、浏览器和其他语言的常见写法都不受影响。

和工作日计算器、调休查询这几页是什么关系?

是同一份数据。工作日计算器、调休查询、放假安排、全年日历这几页用的节假日与调休数据,和这个接口返回的完全一致。只想看结果的直接用那几页;要把节假日接进自己的系统、表格或机器人,就用这个接口。

本页更新于 2026-10-18 · 分类:在线工具