Gathering detailed insights and metrics for chinese-days
Gathering detailed insights and metrics for chinese-days
中国法定节假日、调休和工作日、24节气查询,农历阳历互转,支持 TS、CommonJS、UMD 模块化使用,对非开发者,提供 iCal 日历订阅,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端使用。
npm install chinese-days
Typescript
Module System
Node Version
NPM Version
75.4
Supply Chain
99
Quality
85.3
Maintenance
100
Vulnerability
100
License
TypeScript (100%)
Total Downloads
2,905
Last Day
7
Last Week
45
Last Month
324
Last Year
2,905
305 Stars
120 Commits
16 Forks
2 Watching
4 Branches
2 Contributors
Minified
Minified + Gzipped
Latest Version
1.4.0
Package Id
chinese-days@1.4.0
Unpacked Size
226.55 kB
Size
48.40 kB
File Count
21
NPM Version
10.9.0
Node Version
22.11.0
Publised On
21 Nov 2024
Cumulative downloads
Total Downloads
Last day
-46.2%
7
Compared to previous day
Last week
-43%
45
Compared to previous week
Last month
-54.6%
324
Compared to previous month
Last year
0%
2,905
Compared to previous year
本项目提供了一系列用于查询中国节假日、调休日、工作日、24节气、以及农历阳历互转的函数,此外还支持 iCal
文件订阅节假日,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。
每日会执行 Action
自动抓取数据,节假日变化时发送邮件提醒,信息会跟随国务院发布进行更新。
JS
语言如果你不使用 JS
或 TS
开发项目,本项目提供了中国节假日的 JSON
文件,通过链接 chinese-days.json 可以直接引用。
比如在 Java
中使用,可以参考 Warnier-zhang/java-chinese-days,仅用于查询中国节假日、调休日、工作日;
在 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端中,可以设置订阅地址:https://cdn.jsdelivr.net/npm/chinese-days/dist/holidays.ics 来获取日历订阅。
For English: https://cdn.jsdelivr.net/npm/chinese-days/dist/holidays.en.ics
订阅的日历包含近三年(2023-2025年)的节假日和调休日。
直接浏览器引入,更新较为及时
1<script src="https://cdn.jsdelivr.net/npm/chinese-days/dist/index.min.js"></script> 2<script> 3 chineseDays.isHoliday('2024-01-01'); 4 // 或者解构使用 5 const { isHoliday } = chineseDays; 6</script>
或者
1<script type="module"> 2 import chineseDays from 'https://cdn.jsdelivr.net/npm/chinese-days/dist/index.es.js' 3 chineseDays.isHoliday('2024-01-01'); 4</script>
1npm i chinese-days
使用 ESM 导入
1import chineseDays from 'chinese-days'; 2console.log(chineseDays);
在 Node 中使用
1const { isWorkday, isHoliday } = require('chinese-days'); 2console.log(isWorkday('2020-01-01')); 3console.log(isHoliday('2020-01-01'));
isWorkday
检查某个日期是否为工作日1console.log(isWorkday('2023-01-01')); // false
isHoliday
检查某个日期是否为节假日1console.log(isHoliday('2023-01-01')); // true
isInLieu
检查某个日期是否为调休日(in lieu day)在中国的节假日安排中,调休日是为了连休假期或补班而调整的工作日或休息日。例如,当某个法定假日与周末相连时,可能会将某个周末调整为工作日,或者将某个工作日调整为休息日,以便连休更多天。
1// 检查 2024-05-02 返回 `true` 则表示是一个调休日。 2console.log(isInLieu('2024-05-02')); // true 3 4// 检查 2024-05-01 返回 `false` 则表示不是一个调休日。 5console.log(isInLieu('2024-05-01')); // false
getDayDetail
检查指定日期是否是工作日函数用于检查指定日期是否是工作日,并返回一个是否工作日的布尔值和日期的详情。
1// 示例用法 2 3// 正常工作日 周五 4console.log(getDayDetail('2024-02-02')); // { "date": "2024-02-02", "work":true,"name":"Friday"} 5// 节假日 周末 6console.log(getDayDetail('2024-02-03')); // { "date": "2024-02-03", "work":false,"name":"Saturday"} 7// 调休需要上班 8console.log(getDayDetail('2024-02-04')); // { "date": "2024-02-04", "work":true,"name":"Spring Festival,春节,3"} 9// 节假日 春节 10console.log(getDayDetail('2024-02-17')); // { "date": "2024-02-17", "work":false,"name":"Spring Festival,春节,3"}
getHolidaysInRange
获取指定日期范围内的所有节假日接收起始日期和结束日期,并可选地决定是否包括周末。如果包括周末,则函数会返回包括周末在内的所有节假日;否则,只返回工作日的节假日。
tip: 即使不包括周末,周末的节假日仍然会被返回
1// 示例用法 2const start = '2024-04-26'; 3const end = '2024-05-06'; 4 5// 获取从 2024-05-01 到 2024-05-10 的所有节假日,包括周末 6const holidaysIncludingWeekends = getHolidaysInRange(start, end, true); 7console.log('Holidays including weekends:', holidaysIncludingWeekends.map(d => getDayDetail(d))); 8 9// 获取从 2024-05-01 到 2024-05-10 的节假日,不包括周末 10const holidaysExcludingWeekends = getHolidaysInRange(start, end, false); 11console.log('Holidays excluding weekends:', holidaysExcludingWeekends.map(d => getDayDetail(d)));
getWorkdaysInRange
取指定日期范围内的工作日列表接收起始日期和结束日期,并可选地决定是否包括周末。如果包括周末,则函数会返回包括周末在内的所有工作日;否则,只返回周一到周五的工作日。
1// 示例用法 2const start = '2024-04-26'; 3const end = '2024-05-06'; 4 5// 获取从 2024-05-01 到 2024-05-10 的所有工作日,包括周末 6const workdaysIncludingWeekends = getWorkdaysInRange(start, end, true); 7console.log('Workdays including weekends:', workdaysIncludingWeekends); 8 9// 获取从 2024-05-01 到 2024-05-10 的工作日,不包括周末 10const workdaysExcludingWeekends = getWorkdaysInRange(start, end, false); 11console.log('Workdays excluding weekends:', workdaysExcludingWeekends);
findWorkday
查找工作日查找从今天开始 未来的第 {deltaDays} 个工作日。
1// 查找从今天开始 未来的第 {deltaDays} 个工作日 2// 如果 deltaDays 为 0,首先检查当前日期是否为工作日。如果是,则直接返回当前日期。 3// 如果当前日期不是工作日,会查找下一个工作日。 4const currentWorkday = findWorkday(0); 5console.log(currentWorkday); 6 7// 查找从今天开始未来的第一个工作日 8const nextWorkday = findWorkday(1); 9console.log(nextWorkday); 10 11// 查找从今天开始之前的前一个工作日 12const previousWorkday = findWorkday(-1); 13console.log(previousWorkday); 14 15// 可以传第二个参数 查找具体日期的上下工作日 16// 查找从 2024-05-18 开始,未来的第二个工作日 17const secondNextWorkday = findWorkday(2, '2024-05-18'); 18console.log(secondNextWorkday);
中国的二十四节气是传统的农业历法,它们标志着一年中不同的时间段。每个节气通常有特定的(开始)日期,但这个日期并不代表整个节气的持续时间。事实上,每个节气大约持续15天。
以“小满”为例,它的日期通常在公历5月20日左右开始,但并不止于这一天,而是持续到下一个节气开始。具体来说,小满大约持续到6月5日(芒种)前后。因此,“小满”节气的时间段是从5月20日左右到6月5日左右。
1import { getSolarTermsInRange } from "chinese-days"; 2 3// 不传,查询当天 4console.log(getSolarTermsInRange()) 5// [{date: '2024-05-29', term: 'lesser_fullness_of_grain', name: '小满', index: 10}] 6// index: 代表处于当前节气的第几天,从 1 开始 7 8// 不传end,查询指定日期 9console.log(getSolarTermsInRange('2024-05-01')) 10// [{date: '2024-05-01', term: 'grain_rain', name: '谷雨', index: 13}] 11 12// 查询范围内的节气 13console.log(getSolarTermsInRange('2024-05-01', '2024-05-06')) 14/** 15 * => 16 * [ 17 * {"date":"2024-05-01","term":"grain_rain","name":"谷雨","index":13}, 18 * {"date":"2024-05-02","term":"grain_rain","name":"谷雨","index":14}, 19 * {"date":"2024-05-03","term":"grain_rain","name":"谷雨","index":15}, 20 * {"date":"2024-05-04","term":"grain_rain","name":"谷雨","index":16}, 21 * {"date":"2024-05-05","term":"the_beginning_of_summer","name":"立夏","index":1}, 22 * {"date":"2024-05-06","term":"the_beginning_of_summer","name":"立夏","index":2} 23 * ] 24 **/
1import { getSolarTerms } from "chinese-days"; 2 3/** 获取范围内 节气的开始日期数组 */ 4const solarTerms = getSolarTerms("2024-05-01", "2024-05-20"); 5solarTerms.forEach(({ date, term, name }) => { 6 console.log(`${name}: ${date}, ${term}`); 7}); 8// 立夏: 2024-05-05, the_beginning_of_summer 9// 小满: 2024-05-20, lesser_fullness_of_grain 10 11// 没有节气 返回 [] 12getSolarTerms("2024-05-21", "2024-05-25"); 13// return [] 14 15/* 不传 end 参数, 获取某天 节气 */ 16getSolarTerms("2024-05-20"); 17// return: [{date: '2024-05-20', term: 'lesser_fullness_of_grain', name: '小满'}]
特别说明,此库中:
2057-09-28
为:农历丁丑(牛)年八月三十;2097-08-07
为:农历丁巳(蛇)年七月初一。1// 2097-8-7 2console.log(getLunarDate('2097-08-07')); 3 4// 2057-9-28 5console.log(getLunarDate('2057-09-28')); 6// { 7// date: "2057-09-28", 8// lunarYear: 2057, 9// lunarMon: 8, 10// lunarDay: 30, 11// isLeap: false, 12// lunarDayCN: "三十", 13// lunarMonCN: "八月", 14// lunarYearCN: "二零五七", 15// yearCyl: "丁丑", 16// monCyl: "己酉", 17// dayCyl: "戊子", 18// zodiac: "牛" 19// } 20 21// 非闰月 和 闰月例子 22console.log(getLunarDate('2001-04-27')); 23console.log(getLunarDate('2001-05-27'));
1console.log(getLunarDatesInRange('2001-05-21', '2001-05-26'));
当为阴历闰月的时候,会出现一个农历日期对应两个阳历日期的情况,所以返回对象形式。
1console.log(getSolarDateFromLunar('2001-03-05')); 2// {date: '2001-03-29', leapMonthDate: undefined} 3 4console.log(getSolarDateFromLunar('2001-04-05')); 5// {date: '2001-04-27', leapMonthDate: '2001-05-27'}
Python
版本的 LKI/chinese-calendar 项目。No vulnerabilities found.
No security vulnerabilities found.