53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
import { tool } from "langchain"
|
|
import lunarLib from "lunar-javascript"
|
|
const { Solar, HolidayUtil } = lunarLib
|
|
|
|
/**
|
|
* 年份节日列表工具
|
|
* 基于 lunar-javascript 计算全年节日(公历节日 + 农历传统节日)与法定节假日安排
|
|
*/
|
|
export const getYearHolidaysTool = tool(
|
|
async ({ year }) => {
|
|
try {
|
|
// 法定节假日安排(含调休补班)
|
|
const legal = HolidayUtil.getHolidays(year).map(h => ({
|
|
date: h.getTarget().toString(),
|
|
name: h.getName(),
|
|
type: h.isWork() ? "调休上班" : "放假"
|
|
}))
|
|
|
|
// 遍历全年日期,收集公历节日与农历传统节日(春节、中秋、端午等)
|
|
const festivals = []
|
|
const start = Solar.fromYmd(year, 1, 1)
|
|
const days = Solar.fromYmd(year + 1, 1, 1).subtract(start)
|
|
for (let i = 0; i < days; i++) {
|
|
const d = start.next(i)
|
|
const names = [...d.getFestivals(), ...d.getLunar().getFestivals()]
|
|
if (names.length) {
|
|
festivals.push({ date: d.toString(), name: names.join("、") })
|
|
}
|
|
}
|
|
|
|
return JSON.stringify({ year, legal, festivals }, null, 2)
|
|
} catch (error) {
|
|
return JSON.stringify({ error: error.message }, null, 2)
|
|
}
|
|
},
|
|
{
|
|
name: "get_year_holidays",
|
|
description: "查询给定年份节日所在日期列表,包括法定节假日安排(含调休)与传统节日",
|
|
schema: {
|
|
type: "object",
|
|
properties: {
|
|
year: {
|
|
type: "number",
|
|
description: "年份",
|
|
minimum: 1900,
|
|
maximum: 2100
|
|
}
|
|
},
|
|
required: ["year"]
|
|
}
|
|
}
|
|
)
|