Browse Source

chore: readme

Yaavi 8 months ago
parent
commit
6e6e8316d0
2 changed files with 11 additions and 534 deletions
  1. 7 267
      README.en.md
  2. 4 267
      README.md

+ 7 - 267
README.en.md

@@ -4,7 +4,13 @@
 [![GitHub License](https://img.shields.io/github/license/vsme/chinese-days)](https://github.com/vsme/chinese-days/blob/main/LICENSE)
 [![GitHub License](https://img.shields.io/github/license/vsme/chinese-days)](https://github.com/vsme/chinese-days/blob/main/LICENSE)
 [![README](https://img.shields.io/badge/README-中文-brightgreen.svg)](https://github.com/vsme/chinese-days/blob/main/README.md)
 [![README](https://img.shields.io/badge/README-中文-brightgreen.svg)](https://github.com/vsme/chinese-days/blob/main/README.md)
 
 
-This project provides a series of functions for querying Chinese holidays, adjusted working days, working days, 24 solar terms, and converting between lunar and solar calendars. Additionally, it supports ics file subscription for holidays, which can be subscribed to by Google Calendar, Apple Calendar, Microsoft Outlook, and other clients. The holiday information will be updated according to the announcements from the State Council.
+This project provides a series of functions for querying Chinese holidays, adjusted working days, working days, 24 solar terms, and converting between lunar and solar calendars. Additionally, it supports ics file subscription for holidays, which can be subscribed to by Google Calendar, Apple Calendar, Microsoft Outlook, and other clients. 
+
+## Documentation
+
+To check out docs, visit [chinese-days.yaavi.me](https://chinese-days.yaavi.me/en/).
+
+The holiday information will be updated according to the announcements from the State Council.
 
 
 + **Holidays**: Supports the years 2004 to 2025, including the extended Spring Festival of 2020.
 + **Holidays**: Supports the years 2004 to 2025, including the extended Spring Festival of 2020.
 + **24 Solar Terms**: Supports the years 1900 to 2100.
 + **24 Solar Terms**: Supports the years 1900 to 2100.
@@ -24,272 +30,6 @@ A `JSON` file of Chinese holidays is provided and can be directly referenced thr
 
 
 For example, in `Java`, you can refer to [Warnier-zhang/java-chinese-days](https://github.com/Warnier-zhang/java-chinese-days), which is only for querying Chinese holidays, in-lieu days, and regular workdays.
 For example, in `Java`, you can refer to [Warnier-zhang/java-chinese-days](https://github.com/Warnier-zhang/java-chinese-days), which is only for querying Chinese holidays, in-lieu days, and regular workdays.
 
 
-## Quick Start
-
-### Recommended approach
-
-Direct browser import for more timely updates
-
-```html
-<script src="https://cdn.jsdelivr.net/npm/chinese-days/dist/index.min.js"></script>
-<script>
-  chineseDays.isHoliday('2024-01-01');
-  // Or use destructuring
-  const { isHoliday } = chineseDays;
-</script>
-```
-
-OR
-
-```html
-<script type="module">
-  import chineseDays from 'https://cdn.jsdelivr.net/npm/chinese-days/dist/index.es.js'
-  chineseDays.isHoliday('2024-01-01');
-</script>
-```
-
-### Installation:
-
-```sh
-npm i chinese-days
-```
-
-Using ESM import:
-
-```ts
-import chineseDays from 'chinese-days';
-console.log(chineseDays);
-```
-
-Using in Node.js:
-
-```js
-const { isWorkday, isHoliday } = require('chinese-days');
-console.log(isWorkday('2020-01-01'));
-console.log(isHoliday('2020-01-01'));
-```
-
-## Holiday Module
-
-### `isWorkday` Check if a date is a workday
-
-```js
-console.log(isWorkday('2023-01-01')); // false
-```
-
-### `isHoliday` Check if a date is a holiday
-
-```js
-console.log(isHoliday('2023-01-01')); // true
-```
-
-### `isInLieu` Check if a date is an in lieu day
-
-On a Chinese holiday arrangement, an in lieu day is a workday or a rest day adjusted for consecutive holidays or make-up workdays. For example, if a public holiday is connected to a weekend, a weekend day might be adjusted to a workday, or a workday might be adjusted to a rest day for a longer consecutive holiday.
-
-```js
-// Check if 2024-05-02 is an in lieu day. Returns `true` if it is.
-console.log(isInLieu('2024-05-02')); // true
-
-// Check if 2024-05-01 is an in lieu day. Returns `false` if it is not.
-console.log(isInLieu('2024-05-01')); // false
-```
-
-### `getDayDetail` Check if a specified date is a workday
-
-This function checks if a specified date is a workday and returns a boolean indicating if it's a workday and details about the date.
-
-1. If the specified date is a workday, it returns true and the name of the workday. If it's a make-up workday, it returns true and holiday details.
-2. If it's a holiday, it returns false and holiday details.
-
-```js
-// Example usage
-
-// Regular workday, Friday
-console.log(getDayDetail('2024-02-02')); // { "date": "2024-02-02", "work":true,"name":"Friday"}
-// Holiday, Saturday
-console.log(getDayDetail('2024-02-03')); // { "date": "2024-02-03", "work":false,"name":"Saturday"}
-// Make-up workday
-console.log(getDayDetail('2024-02-04')); // { "date": "2024-02-04", "work":true,"name":"Spring Festival,春节,3"}
-// Holiday, Spring Festival
-console.log(getDayDetail('2024-02-17')); // { "date": "2024-02-17", "work":false,"name":"Spring Festival,春节,3"}
-```
-
-### `getHolidaysInRange` Get all holidays within a specified date range
-
-Receives start and end dates and optionally includes weekends. If weekends are included, the function returns all holidays including weekends; otherwise, only holidays on weekdays are returned.
-
-> Tip: Even if weekends are not included, holidays that fall on weekends will still be returned.
-
-```js
-// Example usage
-const start = '2024-04-26';
-const end = '2024-05-06';
-
-// Get all holidays from 2024-05-01 to 2024-05-10, including weekends
-const holidaysIncludingWeekends = getHolidaysInRange(start, end, true);
-console.log('Holidays including weekends:', holidaysIncludingWeekends.map(d => getDayDetail(d)));
-
-// Get holidays from 2024-05-01 to 2024-05-10, excluding weekends
-const holidaysExcludingWeekends = getHolidaysInRange(start, end, false);
-console.log('Holidays excluding weekends:', holidaysExcludingWeekends.map(d => getDayDetail(d)));
-```
-
-### `getWorkdaysInRange` Get a list of workdays within a specified date range
-
-Receives start and end dates and optionally includes weekends. If weekends are included, the function returns all workdays including weekends; otherwise, only weekdays (Monday to Friday) workdays are returned.
-
-```js
-// Example usage
-const start = '2024-04-26';
-const end = '2024-05-06';
-
-// Get all workdays from 2024-05-01 to 2024-05-10, including weekends
-const workdaysIncludingWeekends = getWorkdaysInRange(start, end, true);
-console.log('Workdays including weekends:', workdaysIncludingWeekends);
-
-// Get workdays from 2024-05-01 to 2024-05-10, excluding weekends
-const workdaysExcludingWeekends = getWorkdaysInRange(start, end, false);
-console.log('Workdays excluding weekends:', workdaysExcludingWeekends);
-```
-
-### `findWorkday` Find a workday
-
-Find the workday that is {deltaDays} workdays from today.
-
-```js
-// Find the workday that is {deltaDays} workdays from today
-// If deltaDays is 0, first check if today is a workday. If it is, return today.
-// If today is not a workday, find the next workday.
-const currentWorkday = findWorkday(0);
-console.log(currentWorkday);
-
-// Find the next workday from today
-const nextWorkday = findWorkday(1);
-console.log(nextWorkday);
-
-// Find the previous workday from today
-const previousWorkday = findWorkday(-1);
-console.log(previousWorkday);
-
-// You can pass a second parameter to find a specific date's workdays
-// Find the second workday from 2024-05-18
-const secondNextWorkday = findWorkday(2, '2024-05-18');
-console.log(secondNextWorkday);
-```
-
-## Solar Terms Module
-
-### Get Dates for the 24 Solar Terms
-
-The 24 solar terms in China are part of a traditional agricultural calendar, marking different **time periods** throughout the year. Each term typically has a specific start date, but this date does not represent the entire duration of the term. In fact, each solar term lasts about 15 days.
-
-For example, the term "Lesser Fullness of Grain" (小满) typically starts around May 20th in the Gregorian calendar, but it doesn't end on that day. Instead, it lasts until the next solar term begins. Specifically, "Lesser Fullness of Grain" lasts until around June 5th, when the "Grain in Ear" (芒种) term begins. Therefore, the time period for the "Lesser Fullness of Grain" solar term is from approximately May 20th to June 5th.
-
-#### Get an Array of Solar Terms Dates within a Range
-
-```js
-import { getSolarTermsInRange } from "chinese-days";
-
-// No parameters, queries the current day
-console.log(getSolarTermsInRange())
-// [{date: '2024-05-29', term: 'lesser_fullness_of_grain', name: '小满', index: 10}]
-// index: indicates the day within the current term, starting from 1
-
-// No end parameter, queries for a specific date
-console.log(getSolarTermsInRange('2024-05-01'))
-// [{date: '2024-05-01', term: 'grain_rain', name: '谷雨', index: 13}]
-
-// Query solar terms within a specified range
-console.log(getSolarTermsInRange('2024-05-01', '2024-05-06'))
-/**
- * =>
- * [
- *   {"date":"2024-05-01","term":"grain_rain","name":"谷雨","index":13},
- *   {"date":"2024-05-02","term":"grain_rain","name":"谷雨","index":14},
- *   {"date":"2024-05-03","term":"grain_rain","name":"谷雨","index":15},
- *   {"date":"2024-05-04","term":"grain_rain","name":"谷雨","index":16},
- *   {"date":"2024-05-05","term":"the_beginning_of_summer","name":"立夏","index":1},
- *   {"date":"2024-05-06","term":"the_beginning_of_summer","name":"立夏","index":2}
- * ]
- **/
-```
-
-#### If You Only Want to Get an Array of Solar Term Start Dates
-
-```js
-import { getSolarTerms } from "chinese-days";
-
-/** Get an array of solar term start dates within a range */
-const solarTerms = getSolarTerms("2024-05-01", "2024-05-20");
-solarTerms.forEach(({ date, term, name }) => {
-  console.log(`${name}: ${date}, ${term}`);
-});
-// 立夏: 2024-05-05, the_beginning_of_summer
-// 小满: 2024-05-20, lesser_fullness_of_grain
-
-// No solar terms found, returns []
-getSolarTerms("2024-05-21", "2024-05-25");
-// return []
-
-/* No end parameter, get the solar term for a specific day */
-getSolarTerms("2024-05-20");
-// return: [{date: '2024-05-20', term: 'lesser_fullness_of_grain', name: '小满'}]
-```
-
-## Conversion Between Gregorian and Lunar Calendar
-
-Special notes for this library:
-1. `2057-09-28` is the lunar date: `丁丑` year, August 30th;
-2. `2097-08-07` is the lunar date: `丁巳` year, July 1st.
-
-### Convert Gregorian Date to Lunar Date
-
-```js
-// 2097-08-07
-console.log(getLunarDate('2097-08-07'));
-
-// 2057-09-28
-console.log(getLunarDate('2057-09-28'));
-// Output:
-// {
-//   date: "2057-09-28",
-//   lunarYear: 2057,
-//   lunarMon: 8,
-//   lunarDay: 30,
-//   isLeap: false,
-//   lunarDayCN: "三十",
-//   lunarMonCN: "八月",
-//   lunarYearCN: "二零五七",
-//   yearCyl: "丁丑",
-//   monCyl: "己酉",
-//   dayCyl: "戊子",
-//   zodiac: "牛"
-// }
-
-// Examples of non-leap and leap months
-console.log(getLunarDate('2001-04-27'));
-console.log(getLunarDate('2001-05-27'));
-```
-
-### Get Lunar Dates in a Range of Gregorian Dates
-
-```js
-console.log(getLunarDatesInRange('2001-05-21', '2001-05-26'));
-```
-
-### Convert Lunar Date to Gregorian Date
-
-When dealing with a leap month in the lunar calendar, one lunar date may correspond to two different Gregorian dates, hence the return is in object form.
-
-```js
-console.log(getSolarDateFromLunar('2001-03-05'));
-// Output: {date: '2001-03-29', leapMonthDate: undefined}
-
-console.log(getSolarDateFromLunar('2001-04-05'));
-// Output: {date: '2001-04-27', leapMonthDate: '2001-05-27'}
-```
-
 ## Contributing
 ## Contributing
 
 
 1. Fork + Clone the project to your local machine;
 1. Fork + Clone the project to your local machine;

+ 4 - 267
README.md

@@ -6,6 +6,10 @@
 
 
 本项目提供了一系列用于查询中国节假日、调休日、工作日、24节气、以及农历阳历互转的函数,此外还支持 `iCal` 文件订阅节假日,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。
 本项目提供了一系列用于查询中国节假日、调休日、工作日、24节气、以及农历阳历互转的函数,此外还支持 `iCal` 文件订阅节假日,可供 Google Calendar、Apple Calendar、Microsoft Outlook 等客户端订阅。
 
 
+## 文档
+
+查看文档, 请访问 [chinese-days.yaavi.me](https://chinese-days.yaavi.me/).
+
 每日会执行 `Action` 自动抓取数据,节假日变化时发送邮件提醒,信息会跟随国务院发布进行更新。
 每日会执行 `Action` 自动抓取数据,节假日变化时发送邮件提醒,信息会跟随国务院发布进行更新。
 
 
 + **节假日**:支持 2004年 至 2025年,包括 2020年 的春节延长
 + **节假日**:支持 2004年 至 2025年,包括 2020年 的春节延长
@@ -26,273 +30,6 @@ For English: [https://cdn.jsdelivr.net/npm/chinese-days/dist/holidays.en.ics](ht
 
 
 订阅的日历包含近三年(2023-2025年)的节假日和调休日。
 订阅的日历包含近三年(2023-2025年)的节假日和调休日。
 
 
-## 快速开始
-
-### 推荐方式
-
-直接浏览器引入,更新较为及时
-
-```html
-<script src="https://cdn.jsdelivr.net/npm/chinese-days/dist/index.min.js"></script>
-<script>
-  chineseDays.isHoliday('2024-01-01');
-  // 或者解构使用
-  const { isHoliday } = chineseDays;
-</script>
-```
-
-或者
-
-```html
-<script type="module">
-  import chineseDays from 'https://cdn.jsdelivr.net/npm/chinese-days/dist/index.es.js'
-  chineseDays.isHoliday('2024-01-01');
-</script>
-```
-
-### 其他方式安装
-
-```sh
-npm i chinese-days
-```
-
-使用 ESM 导入
-
-```ts
-import chineseDays from 'chinese-days';
-console.log(chineseDays);
-```
-
-在 Node 中使用
-
-```js
-const { isWorkday, isHoliday } = require('chinese-days');
-console.log(isWorkday('2020-01-01'));
-console.log(isHoliday('2020-01-01'));
-```
-
-## 节假日模块
-
-### `isWorkday` 检查某个日期是否为工作日
-
-```js
-console.log(isWorkday('2023-01-01')); // false
-```
-
-### `isHoliday` 检查某个日期是否为节假日
-
-```js
-console.log(isHoliday('2023-01-01')); // true
-```
-
-### `isInLieu` 检查某个日期是否为调休日(in lieu day)
-
-在中国的节假日安排中,调休日是为了连休假期或补班而调整的工作日或休息日。例如,当某个法定假日与周末相连时,可能会将某个周末调整为工作日,或者将某个工作日调整为休息日,以便连休更多天。
-
-```js
-// 检查 2024-05-02 返回 `true` 则表示是一个调休日。
-console.log(isInLieu('2024-05-02')); // true
-
-// 检查 2024-05-01 返回 `false` 则表示不是一个调休日。
-console.log(isInLieu('2024-05-01')); // false
-```
-
-
-### `getDayDetail` 检查指定日期是否是工作日
-
-函数用于检查指定日期是否是工作日,并返回一个是否工作日的布尔值和日期的详情。
-
-1. 如果指定日期是工作日,则返回 true 和工作日名称,如果是被调休的工作日,返回 true 和节假日详情。
-2. 如果是节假日,则返回 false 和节假日详情。
-
-```js
-// 示例用法
-
-// 正常工作日 周五
-console.log(getDayDetail('2024-02-02')); // { "date": "2024-02-02", "work":true,"name":"Friday"}
-// 节假日 周末
-console.log(getDayDetail('2024-02-03')); // { "date": "2024-02-03", "work":false,"name":"Saturday"}
-// 调休需要上班
-console.log(getDayDetail('2024-02-04')); // { "date": "2024-02-04", "work":true,"name":"Spring Festival,春节,3"}
-// 节假日 春节
-console.log(getDayDetail('2024-02-17')); // { "date": "2024-02-17", "work":false,"name":"Spring Festival,春节,3"}
-```
-
-### `getHolidaysInRange` 获取指定日期范围内的所有节假日
-
-接收起始日期和结束日期,并可选地决定是否包括周末。如果包括周末,则函数会返回包括周末在内的所有节假日;否则,只返回工作日的节假日。
-
-> tip: 即使不包括周末,周末的节假日仍然会被返回
-
-```js
-// 示例用法
-const start = '2024-04-26';
-const end = '2024-05-06';
-
-// 获取从 2024-05-01 到 2024-05-10 的所有节假日,包括周末
-const holidaysIncludingWeekends = getHolidaysInRange(start, end, true);
-console.log('Holidays including weekends:', holidaysIncludingWeekends.map(d => getDayDetail(d)));
-
-// 获取从 2024-05-01 到 2024-05-10 的节假日,不包括周末
-const holidaysExcludingWeekends = getHolidaysInRange(start, end, false);
-console.log('Holidays excluding weekends:', holidaysExcludingWeekends.map(d => getDayDetail(d)));
-```
-
-
-### `getWorkdaysInRange` 取指定日期范围内的工作日列表
-
-接收起始日期和结束日期,并可选地决定是否包括周末。如果包括周末,则函数会返回包括周末在内的所有工作日;否则,只返回周一到周五的工作日。
-
-```js
-// 示例用法
-const start = '2024-04-26';
-const end = '2024-05-06';
-
-// 获取从 2024-05-01 到 2024-05-10 的所有工作日,包括周末
-const workdaysIncludingWeekends = getWorkdaysInRange(start, end, true);
-console.log('Workdays including weekends:', workdaysIncludingWeekends);
-
-// 获取从 2024-05-01 到 2024-05-10 的工作日,不包括周末
-const workdaysExcludingWeekends = getWorkdaysInRange(start, end, false);
-console.log('Workdays excluding weekends:', workdaysExcludingWeekends);
-```
-
-### `findWorkday` 查找工作日
-
-查找从今天开始 未来的第 {deltaDays} 个工作日。
-
-```js
-// 查找从今天开始 未来的第 {deltaDays} 个工作日
-// 如果 deltaDays 为 0,首先检查当前日期是否为工作日。如果是,则直接返回当前日期。
-// 如果当前日期不是工作日,会查找下一个工作日。
-const currentWorkday = findWorkday(0);
-console.log(currentWorkday);
-
-// 查找从今天开始未来的第一个工作日
-const nextWorkday = findWorkday(1);
-console.log(nextWorkday);
-
-// 查找从今天开始之前的前一个工作日
-const previousWorkday = findWorkday(-1);
-console.log(previousWorkday);
-
-// 可以传第二个参数 查找具体日期的上下工作日
-// 查找从 2024-05-18 开始,未来的第二个工作日
-const secondNextWorkday = findWorkday(2, '2024-05-18');
-console.log(secondNextWorkday);
-```
-
-## 节气模块
-
-### 获取 24 节气的日期
-
-中国的二十四节气是传统的农业历法,它们标志着一年中不同的**时间段**。每个节气通常有特定的(开始)日期,但这个日期并不代表整个节气的持续时间。事实上,每个节气大约持续15天。
-
-以“小满”为例,它的日期通常在公历5月20日左右开始,但并不止于这一天,而是持续到下一个节气开始。具体来说,小满大约持续到6月5日(芒种)前后。因此,“小满”节气的时间段是从5月20日左右到6月5日左右。
-
-#### 获取范围内节气日期数组
-
-```js
-import { getSolarTermsInRange } from "chinese-days";
-
-// 不传,查询当天
-console.log(getSolarTermsInRange())
-// [{date: '2024-05-29', term: 'lesser_fullness_of_grain', name: '小满', index: 10}]
-// index: 代表处于当前节气的第几天,从 1 开始
-
-// 不传end,查询指定日期
-console.log(getSolarTermsInRange('2024-05-01'))
-// [{date: '2024-05-01', term: 'grain_rain', name: '谷雨', index: 13}]
-
-// 查询范围内的节气
-console.log(getSolarTermsInRange('2024-05-01', '2024-05-06'))
-/**
- * =>
- * [
- *   {"date":"2024-05-01","term":"grain_rain","name":"谷雨","index":13},
- *   {"date":"2024-05-02","term":"grain_rain","name":"谷雨","index":14},
- *   {"date":"2024-05-03","term":"grain_rain","name":"谷雨","index":15},
- *   {"date":"2024-05-04","term":"grain_rain","name":"谷雨","index":16},
- *   {"date":"2024-05-05","term":"the_beginning_of_summer","name":"立夏","index":1},
- *   {"date":"2024-05-06","term":"the_beginning_of_summer","name":"立夏","index":2}
- * ]
- **/
-```
-
-#### 如果你仅想获取节气**开始日期**数组
-
-```js
-import { getSolarTerms } from "chinese-days";
-
-/** 获取范围内 节气的开始日期数组 */
-const solarTerms = getSolarTerms("2024-05-01", "2024-05-20");
-solarTerms.forEach(({ date, term, name }) => {
-  console.log(`${name}: ${date}, ${term}`);
-});
-// 立夏: 2024-05-05, the_beginning_of_summer
-// 小满: 2024-05-20, lesser_fullness_of_grain
-
-// 没有节气 返回 []
-getSolarTerms("2024-05-21", "2024-05-25");
-// return []
-
-/* 不传 end 参数, 获取某天 节气 */
-getSolarTerms("2024-05-20");
-// return: [{date: '2024-05-20', term: 'lesser_fullness_of_grain', name: '小满'}]
-```
-
-## 阳历农历互转
-
-特别说明,此库中:
-1. `2057-09-28` 为:农历丁丑(牛)年八月三十;
-2. `2097-08-07` 为:农历丁巳(蛇)年七月初一。
-
-### 阳历转换农历
-
-```js
-// 2097-8-7
-console.log(getLunarDate('2097-08-07'));
-
-// 2057-9-28
-console.log(getLunarDate('2057-09-28'));
-// {
-//   date: "2057-09-28",
-//   lunarYear: 2057,
-//   lunarMon: 8,
-//   lunarDay: 30,
-//   isLeap: false,
-//   lunarDayCN: "三十",
-//   lunarMonCN: "八月",
-//   lunarYearCN: "二零五七",
-//   yearCyl: "丁丑",
-//   monCyl: "己酉",
-//   dayCyl: "戊子",
-//   zodiac: "牛"
-// }
-
-// 非闰月 和 闰月例子
-console.log(getLunarDate('2001-04-27'));
-console.log(getLunarDate('2001-05-27'));
-```
-
-### 根据阳历日期区间,批量获取农历日期
-
-```js
-console.log(getLunarDatesInRange('2001-05-21', '2001-05-26'));
-```
-
-### 农历转换阳历
-
-当为阴历闰月的时候,会出现一个农历日期对应两个阳历日期的情况,所以返回对象形式。
-
-```js
-console.log(getSolarDateFromLunar('2001-03-05'));
-// {date: '2001-03-29', leapMonthDate: undefined}
-
-console.log(getSolarDateFromLunar('2001-04-05'));
-// {date: '2001-04-27', leapMonthDate: '2001-05-27'}
-```
-
 ## 贡献代码
 ## 贡献代码
 
 
 1. Fork + Clone 项目到本地;
 1. Fork + Clone 项目到本地;