节假日查询:某天到底放不放假?894-6 单日判定接入指南
# 节假日查询:某天到底放不放假?894-6 单日判定接入指南
> 接口 894(接入点 894-6 节假日查询) · 免费 · POST/GET · 返回 JSON · 适用人群:开发者、产品经理 · 阅读时间:约 7 分钟
## TL;DR
- 用 **894-6** 接入点传 `day` 查某一天,靠 `type` 字段判定:`1`=工作日、`2`=周末、`3`=节假日。
- 不传 `day` 默认查当天,适合「今天放不放假」类实时场景。
- 工作日时 `begin`/`end` 为空串,渲染时要做兜底。
## Why:最常见的需求
"今天要不要上班?""这个日期下单能不能发货?""提醒我节前最后一天加班"——这些功能的第一步都是**判断某一天的属性**。894-6 就是干这个的:输入一个日期,告诉你它是工作日、周末还是节假日,并带上星期、节日名称。
## What:接口速览
| 项 | 说明 |
|----|------|
| 接入点 | **894-6 节假日查询**(按日判定) |
| 接口地址 | `https://route.showapi.com/894-6?appKey=YOUR_APPKEY` |
| 请求方式 | POST / GET |
| 计费 | 免费服务(有使用档位限制) |
| 数据范围 | 支持自 2018 年以来的数据 |
**请求参数(894-6)**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| day | String | 否 | 要查询是否放假的日期;默认查当天 |
| needDesc | Number | 否 | 是否返回节日简介:`1`=返回公众日/国际日/传统节日简介,`2`=仅法定节假日简介,默认不返回 |
## How:判定某一天
### 步骤 1:发请求查指定日期
**Python(requests)**
```python
import requests
url = "https://route.showapi.com/894-6"
params = {"appKey": "YOUR_APPKEY", "day": "2026-01-01"}
r = requests.post(url, params=params, timeout=10)
body = r.json()
ret = str(body["showapi_res_body"]["ret_code"])
if ret != "0":
print("失败:", body.get("showapi_res_error"))
else:
b = body["showapi_res_body"]
type_map = {"1": "工作日", "2": "周末", "3": "节假日"}
print(b["day"], "→", type_map.get(b["type"], "未知"))
print("节日:", b.get("holiday"))
print("起止:", b.get("begin") or "—", b.get("end") or "—")
```
**Node.js(fetch)**
```javascript
const url = "https://route.showapi.com/894-6?appKey=YOUR_APPKEY&day=2026-01-01";
const res = await fetch(url, { method: "POST", timeout: 10000 });
const body = await res.json();
const b = body.showapi_res_body;
if (String(b.ret_code) !== "0") {
console.error("失败:", body.showapi_res_error);
} else {
const map = { "1": "工作日", "2": "周末", "3": "节假日" };
console.log(b.day, "→", map[b.type], "| 节日:", b.holiday);
}
```
**cURL**
```bash
curl -X POST "https://route.showapi.com/894-6?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "day=2026-01-01"
```
### 步骤 2:用 type 着色渲染
前端拿到 `type` 后可直接映射颜色:
```javascript
const colorMap = { "1": "#e8e8e8", "2": "#cfe8ff", "3": "#ffd6d6" };
const cell = document.getElementById("day-2026-01-01");
cell.style.background = colorMap[body.type]; // 灰=工作 蓝=周末 红=节假日
```
## 返回示例与解析
```json
{
"showapi_res_body": {
"ret_code": 0,
"day": "2026-01-01",
"type": "3",
"weekDay": 4,
"cn": "星期四",
"en": "Thursday",
"holiday": "元旦",
"holiday_remark": "1月1日放假,共1天。",
"begin": "20260101",
"end": "20260101"
}
}
```
| 字段 | 说明 |
|------|------|
| type | `1` 工作日 / `2` 周末 / `3` 节假日(仅 894-6 有) |
| weekDay | 星期几的数字 |
| cn / en | 星期几中文 / 英文名 |
| holiday | 节日名;工作日显示「无」,周末显示「周末」 |
| begin / end | 节日或周末起止;**工作日时为空串**,渲染需兜底 |
## 进阶 / 边界
- **工作日 begin/end 为空串**:别直接把空串当日期解析,先判断是否为空。
- **想拿节日简介**:传 `needDesc=1`(公众日/国际日/传统节日)或 `2`(仅法定节假日),否则 `h` 字段不返回。
- **数据自 2018 年起**:查 2018 年之前的日期没有数据,会返回非节假日或失败,需业务层兜底。详见 [节假日查询:为什么只能查 2018 年起?](https://www.showapi.com/guides/holiday-query-data-range-894)。
## FAQ
**Q1:type=1 但 holiday 写「无」正常吗?**
A:正常。工作日时 `holiday` 显示「无」,`begin`/`end` 为空串。
**Q2:不传 day 查的是什么?**
A:默认查当天,适合「今天放不放假」实时提示。
**Q3:周末和节假日都放假,怎么区分?**
A:看 `type`:`2` 是普通周末,`3` 是法定节假日(可能含调休)。
**Q4:needDesc 传 1 和 2 有什么区别?**
A:`1` 返回公众日/国际日/传统节日简介;`2` 只返回我国法定节假日简介。详见 [节日简介与农历日期怎么拿?](https://www.showapi.com/guides/holiday-query-festival-intro-894)。
**Q5:ret_code 是字符串还是数字?**
A:894-6 是数字 `0`。统一用 `str(...)` 判断可兼容全部接入点。
## 相关能力 / 下一步阅读
- [节假日查询返回字段全解:ret_code 与 type(1/2/3) 及三接入点结构一文读懂](https://www.showapi.com/guides/holiday-query-response-codes-894)
- [节假日查询:一键生成全年放假日历,894-4 假日列表实战](https://www.showapi.com/guides/holiday-query-year-list-894)
- [节假日查询:节日简介与农历日期怎么拿?needDesc 与 h 字段实战](https://www.showapi.com/guides/holiday-query-festival-intro-894)
- **本系列共 12 篇**:查看[节假日查询指南总目录](https://www.showapi.com/guides/holiday-query-guides-894)