@sanguo-dev/calendar 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +229 -229
- package/package.json +68 -68
- package/src/config.ts +198 -198
- package/src/data/Calendar.ts +599 -599
- package/src/data/festival.json +195 -195
- package/src/data/rest.json +74 -74
- package/src/index.ts +317 -317
- package/src/types.ts +146 -146
- package/src/utils/Assert.ts +230 -230
- package/src/utils/LunarFunction.ts +215 -215
- package/src/utils/SetFestival.ts +40 -40
- package/src/utils/SetRest.ts +84 -84
- package/src/utils/SolarFunction.ts +162 -162
package/src/types.ts
CHANGED
|
@@ -1,146 +1,146 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 公历节日 / 农历节日的映射表
|
|
3
|
-
* key 为四位 "MMDD",value 为节日名称数组
|
|
4
|
-
*/
|
|
5
|
-
export type FestivalMap = Record<string, string[]>;
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 节日配置,sFtv 为公历节日,lFtv 为农历节日
|
|
9
|
-
*/
|
|
10
|
-
export interface FestivalConfig {
|
|
11
|
-
/** 公历节日,key 为 MMDD,例如 { "0101": ["元旦"] } */
|
|
12
|
-
sFtv?: FestivalMap;
|
|
13
|
-
/** 农历节日,key 为 MMDD,例如 { "0101": ["春节"] } */
|
|
14
|
-
lFtv?: FestivalMap;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* 单年的放假与调休配置(用户注入时的形态,两个数组都可省略)
|
|
19
|
-
*/
|
|
20
|
-
export interface RestEntry {
|
|
21
|
-
/** 该年放假日(MMDD),不含普通周末 */
|
|
22
|
-
xiu?: string[];
|
|
23
|
-
/** 该年调休补班日(MMDD),一般是周末上班 */
|
|
24
|
-
ban?: string[];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* 归一化之后的单年配置:两个数组一定存在,内部查询用
|
|
29
|
-
*/
|
|
30
|
-
export interface NormalizedRestEntry {
|
|
31
|
-
xiu: string[];
|
|
32
|
-
ban: string[];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** 规范化后的调休表,key 为年份 */
|
|
36
|
-
export type RestMap = Record<string, NormalizedRestEntry>;
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* 调休配置,key 为年份,value 为该年的放假/补班日
|
|
40
|
-
*/
|
|
41
|
-
export type RestConfig = Record<string | number, RestEntry>;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* getHolidays() 的返回值:结构完整,可直接再传给 createCalendar()
|
|
45
|
-
*/
|
|
46
|
-
export interface HolidaySnapshot {
|
|
47
|
-
setFestival: {
|
|
48
|
-
sFtv: FestivalMap;
|
|
49
|
-
lFtv: FestivalMap;
|
|
50
|
-
};
|
|
51
|
-
setRest: Record<string, NormalizedRestEntry>;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* createCalendar 的入参
|
|
56
|
-
*/
|
|
57
|
-
export interface HolidayConfig {
|
|
58
|
-
setFestival?: FestivalConfig;
|
|
59
|
-
setRest?: RestConfig;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* createCalendar 的选项
|
|
64
|
-
*/
|
|
65
|
-
export interface SetHolidayOptions {
|
|
66
|
-
/** 为 true 时丢弃内置节日/调休数据,只使用传入的数据 */
|
|
67
|
-
replace?: boolean;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* 公历转农历 / 农历转公历的完整结果
|
|
72
|
-
*/
|
|
73
|
-
export interface LunarResult {
|
|
74
|
-
/** 是否在 rest.json 的放假日列表(xiu)中;与周末无关 */
|
|
75
|
-
xiu: boolean;
|
|
76
|
-
/** 是否在 rest.json 的调休补班日列表(ban)中 */
|
|
77
|
-
ban: boolean;
|
|
78
|
-
/** 公历节日,例如 ["元旦"];没有节日时是共享的只读空数组 */
|
|
79
|
-
gljr: readonly string[];
|
|
80
|
-
/** 农历节日,例如 ["春节"];没有节日时是共享的只读空数组 */
|
|
81
|
-
nljr: readonly string[];
|
|
82
|
-
/** 农历年 */
|
|
83
|
-
lYear: number;
|
|
84
|
-
/** 农历月,1-12 */
|
|
85
|
-
lMonth: number;
|
|
86
|
-
/** 农历日,1-30 */
|
|
87
|
-
lDay: number;
|
|
88
|
-
/** 生肖,以农历年为准 */
|
|
89
|
-
animal: string;
|
|
90
|
-
/** 农历月中文名,例如 "正月"、"闰四月" */
|
|
91
|
-
lMonthCn: string;
|
|
92
|
-
/** 农历日中文名,例如 "初一" */
|
|
93
|
-
lDayCn: string;
|
|
94
|
-
/** 公历年 */
|
|
95
|
-
cYear: number;
|
|
96
|
-
/** 公历月,1-12 */
|
|
97
|
-
cMonth: number;
|
|
98
|
-
/** 公历日 */
|
|
99
|
-
cDay: number;
|
|
100
|
-
/** 干支年,以立春为界,与 gzMonth 口径一致 */
|
|
101
|
-
gzYear: string;
|
|
102
|
-
/** 干支年,以正月初一为界,与 animal 口径一致 */
|
|
103
|
-
gzYearLunar: string;
|
|
104
|
-
/** 干支月,以节气为界 */
|
|
105
|
-
gzMonth: string;
|
|
106
|
-
/** 干支日 */
|
|
107
|
-
gzDay: string;
|
|
108
|
-
/** 当天十二个时辰的干支 */
|
|
109
|
-
gzHour: string[];
|
|
110
|
-
/** 是否今天(按本地时区) */
|
|
111
|
-
isToday: boolean;
|
|
112
|
-
/** 是否闰月 */
|
|
113
|
-
isLeap: boolean;
|
|
114
|
-
/** 星期数字,1-7,周一为 1、周日为 7 */
|
|
115
|
-
nWeek: number;
|
|
116
|
-
/** 星期数字,0-6,周日为 0,与 solarFirstWeek 口径一致 */
|
|
117
|
-
dayOfWeek: number;
|
|
118
|
-
/** 星期中文,例如 "星期日" */
|
|
119
|
-
ncWeek: string;
|
|
120
|
-
/** 节气名,当天不是节气时为 null */
|
|
121
|
-
term: string | null;
|
|
122
|
-
/** 星座,例如 "摩羯座" */
|
|
123
|
-
astro: string;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* getHolidays 的选项
|
|
128
|
-
*/
|
|
129
|
-
export interface GetHolidaysOptions {
|
|
130
|
-
/** 默认 true:返回合并内置数据后的完整配置;false:只返回创建实例时传入的那部分 */
|
|
131
|
-
merged?: boolean;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* 固定了一份节假日配置的日历实例
|
|
136
|
-
*
|
|
137
|
-
* 由 createCalendar() 创建,配置在创建时固定,实例之间互不影响。
|
|
138
|
-
*/
|
|
139
|
-
export interface Calendar {
|
|
140
|
-
/** 公历转农历,不传参返回今天 */
|
|
141
|
-
solarToLunar(this: void, y?: number, m?: number, d?: number): LunarResult;
|
|
142
|
-
/** 农历转公历 */
|
|
143
|
-
lunarToSolar(this: void, y: number, m: number, d: number, isLeapMonth?: boolean): LunarResult;
|
|
144
|
-
/** 该实例当前配置的深拷贝,可再次用于 createCalendar() */
|
|
145
|
-
getHolidays(this: void, options?: GetHolidaysOptions): HolidaySnapshot;
|
|
146
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* 公历节日 / 农历节日的映射表
|
|
3
|
+
* key 为四位 "MMDD",value 为节日名称数组
|
|
4
|
+
*/
|
|
5
|
+
export type FestivalMap = Record<string, string[]>;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 节日配置,sFtv 为公历节日,lFtv 为农历节日
|
|
9
|
+
*/
|
|
10
|
+
export interface FestivalConfig {
|
|
11
|
+
/** 公历节日,key 为 MMDD,例如 { "0101": ["元旦"] } */
|
|
12
|
+
sFtv?: FestivalMap;
|
|
13
|
+
/** 农历节日,key 为 MMDD,例如 { "0101": ["春节"] } */
|
|
14
|
+
lFtv?: FestivalMap;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* 单年的放假与调休配置(用户注入时的形态,两个数组都可省略)
|
|
19
|
+
*/
|
|
20
|
+
export interface RestEntry {
|
|
21
|
+
/** 该年放假日(MMDD),不含普通周末 */
|
|
22
|
+
xiu?: string[];
|
|
23
|
+
/** 该年调休补班日(MMDD),一般是周末上班 */
|
|
24
|
+
ban?: string[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 归一化之后的单年配置:两个数组一定存在,内部查询用
|
|
29
|
+
*/
|
|
30
|
+
export interface NormalizedRestEntry {
|
|
31
|
+
xiu: string[];
|
|
32
|
+
ban: string[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** 规范化后的调休表,key 为年份 */
|
|
36
|
+
export type RestMap = Record<string, NormalizedRestEntry>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 调休配置,key 为年份,value 为该年的放假/补班日
|
|
40
|
+
*/
|
|
41
|
+
export type RestConfig = Record<string | number, RestEntry>;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* getHolidays() 的返回值:结构完整,可直接再传给 createCalendar()
|
|
45
|
+
*/
|
|
46
|
+
export interface HolidaySnapshot {
|
|
47
|
+
setFestival: {
|
|
48
|
+
sFtv: FestivalMap;
|
|
49
|
+
lFtv: FestivalMap;
|
|
50
|
+
};
|
|
51
|
+
setRest: Record<string, NormalizedRestEntry>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* createCalendar 的入参
|
|
56
|
+
*/
|
|
57
|
+
export interface HolidayConfig {
|
|
58
|
+
setFestival?: FestivalConfig;
|
|
59
|
+
setRest?: RestConfig;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* createCalendar 的选项
|
|
64
|
+
*/
|
|
65
|
+
export interface SetHolidayOptions {
|
|
66
|
+
/** 为 true 时丢弃内置节日/调休数据,只使用传入的数据 */
|
|
67
|
+
replace?: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 公历转农历 / 农历转公历的完整结果
|
|
72
|
+
*/
|
|
73
|
+
export interface LunarResult {
|
|
74
|
+
/** 是否在 rest.json 的放假日列表(xiu)中;与周末无关 */
|
|
75
|
+
xiu: boolean;
|
|
76
|
+
/** 是否在 rest.json 的调休补班日列表(ban)中 */
|
|
77
|
+
ban: boolean;
|
|
78
|
+
/** 公历节日,例如 ["元旦"];没有节日时是共享的只读空数组 */
|
|
79
|
+
gljr: readonly string[];
|
|
80
|
+
/** 农历节日,例如 ["春节"];没有节日时是共享的只读空数组 */
|
|
81
|
+
nljr: readonly string[];
|
|
82
|
+
/** 农历年 */
|
|
83
|
+
lYear: number;
|
|
84
|
+
/** 农历月,1-12 */
|
|
85
|
+
lMonth: number;
|
|
86
|
+
/** 农历日,1-30 */
|
|
87
|
+
lDay: number;
|
|
88
|
+
/** 生肖,以农历年为准 */
|
|
89
|
+
animal: string;
|
|
90
|
+
/** 农历月中文名,例如 "正月"、"闰四月" */
|
|
91
|
+
lMonthCn: string;
|
|
92
|
+
/** 农历日中文名,例如 "初一" */
|
|
93
|
+
lDayCn: string;
|
|
94
|
+
/** 公历年 */
|
|
95
|
+
cYear: number;
|
|
96
|
+
/** 公历月,1-12 */
|
|
97
|
+
cMonth: number;
|
|
98
|
+
/** 公历日 */
|
|
99
|
+
cDay: number;
|
|
100
|
+
/** 干支年,以立春为界,与 gzMonth 口径一致 */
|
|
101
|
+
gzYear: string;
|
|
102
|
+
/** 干支年,以正月初一为界,与 animal 口径一致 */
|
|
103
|
+
gzYearLunar: string;
|
|
104
|
+
/** 干支月,以节气为界 */
|
|
105
|
+
gzMonth: string;
|
|
106
|
+
/** 干支日 */
|
|
107
|
+
gzDay: string;
|
|
108
|
+
/** 当天十二个时辰的干支 */
|
|
109
|
+
gzHour: string[];
|
|
110
|
+
/** 是否今天(按本地时区) */
|
|
111
|
+
isToday: boolean;
|
|
112
|
+
/** 是否闰月 */
|
|
113
|
+
isLeap: boolean;
|
|
114
|
+
/** 星期数字,1-7,周一为 1、周日为 7 */
|
|
115
|
+
nWeek: number;
|
|
116
|
+
/** 星期数字,0-6,周日为 0,与 solarFirstWeek 口径一致 */
|
|
117
|
+
dayOfWeek: number;
|
|
118
|
+
/** 星期中文,例如 "星期日" */
|
|
119
|
+
ncWeek: string;
|
|
120
|
+
/** 节气名,当天不是节气时为 null */
|
|
121
|
+
term: string | null;
|
|
122
|
+
/** 星座,例如 "摩羯座" */
|
|
123
|
+
astro: string;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* getHolidays 的选项
|
|
128
|
+
*/
|
|
129
|
+
export interface GetHolidaysOptions {
|
|
130
|
+
/** 默认 true:返回合并内置数据后的完整配置;false:只返回创建实例时传入的那部分 */
|
|
131
|
+
merged?: boolean;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* 固定了一份节假日配置的日历实例
|
|
136
|
+
*
|
|
137
|
+
* 由 createCalendar() 创建,配置在创建时固定,实例之间互不影响。
|
|
138
|
+
*/
|
|
139
|
+
export interface Calendar {
|
|
140
|
+
/** 公历转农历,不传参返回今天 */
|
|
141
|
+
solarToLunar(this: void, y?: number, m?: number, d?: number): LunarResult;
|
|
142
|
+
/** 农历转公历 */
|
|
143
|
+
lunarToSolar(this: void, y: number, m: number, d: number, isLeapMonth?: boolean): LunarResult;
|
|
144
|
+
/** 该实例当前配置的深拷贝,可再次用于 createCalendar() */
|
|
145
|
+
getHolidays(this: void, options?: GetHolidaysOptions): HolidaySnapshot;
|
|
146
|
+
}
|