66761cf1 by joe

1

1 parent 3f03b9c8
...@@ -5,6 +5,7 @@ import { ...@@ -5,6 +5,7 @@ import {
5 } from '@/api/fetch-api.js' 5 } from '@/api/fetch-api.js'
6 6
7 import Date from '@/utils/date.js'; 7 import Date from '@/utils/date.js';
8 import { toSolar } from '@/utils/lunar.js';
8 9
9 import { 10 import {
10 ddMMyyyy2yyyyMMdd 11 ddMMyyyy2yyyyMMdd
...@@ -100,6 +101,16 @@ export default { ...@@ -100,6 +101,16 @@ export default {
100 // 用户渲染的数据 101 // 用户渲染的数据
101 fortmatMonthData: [], 102 fortmatMonthData: [],
102 visible: false, 103 visible: false,
104 hkHolidayDefine: {
105 // 公历假期,缺少复活节,缺少聖誕節後第一個周日
106 gl: [[1, 1], [4, 10], [4, 11], [4, 30], [5, 1], [7, 1], [10, 1], [10, 2], [12, 25]],
107 // 农历假期,缺少清明节
108 nl: [[1, 1], [1, 2], [1, 3], [5, 5], [8, 15], [9, 9]]
109 },
110 // 节假日,key是月份,value是日期列表
111 holiday: {
112
113 }
103 } 114 }
104 }, 115 },
105 components: {}, 116 components: {},
...@@ -201,6 +212,16 @@ export default { ...@@ -201,6 +212,16 @@ export default {
201 nowDate.setHours(0, 0, 0, 0); 212 nowDate.setHours(0, 0, 0, 0);
202 disable = buildDate.getTime() == nowDate.getTime(); 213 disable = buildDate.getTime() == nowDate.getTime();
203 } 214 }
215 if (!disable && this.filtModel.indexOf("holiday") >= 0) {
216 if (isWeekend) {
217 disable = true;
218 } else {
219 let holidayCandidates = this.holiday[month+""];
220 if (holidayCandidates && holidayCandidates.indexOf(d) >= 0) {
221 disable = true;
222 }
223 }
224 }
204 if (!disable && this.filtModel.indexOf("history") >= 0) { 225 if (!disable && this.filtModel.indexOf("history") >= 0) {
205 buildDate.setHours(23, 59, 59, 999); 226 buildDate.setHours(23, 59, 59, 999);
206 disable = buildDate.getTime() < nowDate.getTime() 227 disable = buildDate.getTime() < nowDate.getTime()
...@@ -510,6 +531,70 @@ export default { ...@@ -510,6 +531,70 @@ export default {
510 }, 531 },
511 judgeLastDateValidate(val) { 532 judgeLastDateValidate(val) {
512 533
534 },
535 calculateHolidays() {
536 // 计算新历
537 let result = {};
538 let year = this.year;
539 if (!year) {
540 return;
541 }
542 let hkHolidayDefine = this.hkHolidayDefine;
543 for (let index = 0; index < hkHolidayDefine.gl.length; index++) {
544 let m = hkHolidayDefine.gl[index][0];
545 let d = hkHolidayDefine.gl[index][1];
546
547 // 如果是周六/周日,顺延到下周一
548 let date = Date.parse(`${year}.${m}.${d}`);
549 if (date.getDay() == 6) {
550 // 周六
551 date.addDays(2);
552 } else if (date.getDay() == 0) {
553 date.addDays(1);
554 }
555 m = date.getMonth() + 1;
556 d = date.getDate();
557
558 let list = result[m];
559 if (!list) {
560 result[m] = [];
561 list = result[m];
562 }
563 list.push(d);
564 }
565
566
567 for (let index = 0; index < hkHolidayDefine.nl.length; index++) {
568 let m = hkHolidayDefine.nl[index][0];
569 let d = hkHolidayDefine.nl[index][1];
570 let gl = toSolar(year, m, d);
571
572 m = gl[1];
573 d = gl[2];
574
575 // 如果是周六/周日,顺延到下周一
576 let date = Date.parse(`${year}.${m}.${d}`);
577
578 if (date.getDay() == 6) {
579 // 周六
580 date.addDays(2);
581 } else if (date.getDay() == 0) {
582 date.addDays(1);
583 }
584 m = date.getMonth() + 1;
585 d = date.getDate();
586
587 let list = result[m];
588 if (!list) {
589 result[m] = [];
590 list = result[m];
591 }
592 list.push(d);
593 }
594
595 this.holiday = result;
596 console.log(JSON.stringify(this.holiday));
597
513 } 598 }
514 }, 599 },
515 mounted() { }, 600 mounted() { },
...@@ -524,6 +609,9 @@ export default { ...@@ -524,6 +609,9 @@ export default {
524 dateValue(val, oldVal) { 609 dateValue(val, oldVal) {
525 this.checkDateValue(); 610 this.checkDateValue();
526 this.$emit('input', val); 611 this.$emit('input', val);
612 },
613 year() {
614 this.calculateHolidays();
527 } 615 }
528 } 616 }
529 } 617 }
......
...@@ -95,6 +95,7 @@ export default { ...@@ -95,6 +95,7 @@ export default {
95 } 95 }
96 }, 96 },
97 logoutHandler() { 97 logoutHandler() {
98 this.clearCache();
98 httpPost({ 99 httpPost({
99 url: api.logout 100 url: api.logout
100 }).then(() => { 101 }).then(() => {
...@@ -102,6 +103,12 @@ export default { ...@@ -102,6 +103,12 @@ export default {
102 this.showLogoutTip(); 103 this.showLogoutTip();
103 }); 104 });
104 }, 105 },
106 clearCache() {
107 for (let index = 0; index < sessionStorage.length; index++) {
108 let key = sessionStorage.key(index);
109 sessionStorage.removeItem(key);
110 }
111 },
105 // 点击item 112 // 点击item
106 onChangeHandler(evt) { 113 onChangeHandler(evt) {
107 this.activeIndex = evt; 114 this.activeIndex = evt;
......
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
84 </div> 84 </div>
85 <div class="ipt-wrap ipt-wrap2"> 85 <div class="ipt-wrap ipt-wrap2">
86 <!-- <input class="ipt" type="date" :class="{err:errorTips.contactDateErr.length>0}" v-model="data.contactDate"> --> 86 <!-- <input class="ipt" type="date" :class="{err:errorTips.contactDateErr.length>0}" v-model="data.contactDate"> -->
87 <date-picker v-model="data.contactDate" :check="checkDate"></date-picker> 87 <date-picker v-model="data.contactDate" :check="checkDate" :filtModel="['history','holiday']"></date-picker>
88 </div> 88 </div>
89 <div class="validator" v-if="errorTips.contactDateErr.length > 0"> 89 <div class="validator" v-if="errorTips.contactDateErr.length > 0">
90 <img src="@/assets/images/common/icon-notice.png" alt="">{{errorTips.contactDateErr}} 90 <img src="@/assets/images/common/icon-notice.png" alt="">{{errorTips.contactDateErr}}
......
...@@ -233,7 +233,6 @@ export default { ...@@ -233,7 +233,6 @@ export default {
233 }, 233 },
234 234
235 created() { 235 created() {
236
237 } 236 }
238 237
239 } 238 }
......
...@@ -122,6 +122,9 @@ export default { ...@@ -122,6 +122,9 @@ export default {
122 initData() { 122 initData() {
123 httpPost({ url: api.profile, sid: true }).then(content => { 123 httpPost({ url: api.profile, sid: true }).then(content => {
124 if (content) { 124 if (content) {
125 if (content.birthDate.indexOf(" ") > 0) {
126 content.birthDate = content.birthDate.split(" ")[0];
127 }
125 this.information = content; 128 this.information = content;
126 if (content && content.birthDate) { 129 if (content && content.birthDate) {
127 this.birthDate = content.birthDate; 130 this.birthDate = content.birthDate;
......
1
2 var calendar = {
3
4 /**
5 * 农历1900-2100的润大小信息表
6 * @Array Of Property
7 * @return Hex
8 */
9 lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909
10 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919
11 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929
12 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939
13 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949
14 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959
15 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969
16 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979
17 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989
18 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999
19 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009
20 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019
21 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029
22 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039
23 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049
24 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059
25 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069
26 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079
27 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089
28 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099
29 0x0d520],//2100
30
31 /**
32 * 公历每个月份的天数普通表
33 * @Array Of Property
34 * @return Number
35 */
36 solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
37
38 /**
39 * 天干地支之天干速查表
40 * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
41 * @return Cn string
42 */
43 Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"],
44
45 /**
46 * 天干地支之地支速查表
47 * @Array Of Property
48 * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
49 * @return Cn string
50 */
51 Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"],
52
53 /**
54 * 天干地支之地支速查表<=>生肖
55 * @Array Of Property
56 * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
57 * @return Cn string
58 */
59 Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"],
60
61 /**
62 * 24节气速查表
63 * @Array Of Property
64 * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
65 * @return Cn string
66 */
67 solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"],
68
69 /**
70 * 1900-2100各年的24节气日期速查表
71 * @Array Of Property
72 * @return 0x string For splice
73 */
74 sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
75 '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
76 '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
77 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
78 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
79 '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
80 '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
81 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
82 '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
83 '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
84 '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
85 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
86 '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
87 '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
88 '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
89 '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
90 '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
91 '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
92 '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
93 '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
94 '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
95 '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
96 '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
97 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
98 '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
99 '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
100 '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
101 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
102 '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
103 '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
104 '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
105 '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
106 '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
107 '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
108 '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
109 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
110 '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
111 '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
112 '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
113 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
114 '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
115 '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
116 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
117 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
118 '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
119 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
120 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
121 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
122 '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
123 '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
124 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
125 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
126 '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
127 '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
128 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
129 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
130 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
131 '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
132 '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
133 '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
134 '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
135 '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
136 '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
137 '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
138 '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
139 '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
140 '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
141
142 /**
143 * 数字转中文速查表
144 * @Array Of Property
145 * @trans ['日','一','二','三','四','五','六','七','八','九','十']
146 * @return Cn string
147 */
148 nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"],
149
150 /**
151 * 日期转农历称呼速查表
152 * @Array Of Property
153 * @trans ['初','十','廿','卅']
154 * @return Cn string
155 */
156 nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"],
157
158 /**
159 * 月份转农历称呼速查表
160 * @Array Of Property
161 * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
162 * @return Cn string
163 */
164 nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"],
165
166 /**
167 * 返回农历y年一整年的总天数
168 * @param lunar Year
169 * @return Number
170 * @eg:var count = calendar.lYearDays(1987) ;//count=387
171 */
172 lYearDays: function (y) {
173 var i, sum = 348;
174 for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0; }
175 return (sum + this.leapDays(y));
176 },
177
178 /**
179 * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
180 * @param lunar Year
181 * @return Number (0-12)
182 * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
183 */
184 leapMonth: function (y) { //闰字编码 \u95f0
185 return (this.lunarInfo[y - 1900] & 0xf);
186 },
187
188 /**
189 * 返回农历y年闰月的天数 若该年没有闰月则返回0
190 * @param lunar Year
191 * @return Number (0、29、30)
192 * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
193 */
194 leapDays: function (y) {
195 if (this.leapMonth(y)) {
196 return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29);
197 }
198 return (0);
199 },
200
201 /**
202 * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
203 * @param lunar Year
204 * @return Number (-1、29、30)
205 * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
206 */
207 monthDays: function (y, m) {
208 if (m > 12 || m < 1) { return -1 }//月份参数从1至12,参数错误返回-1
209 return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29);
210 },
211
212 /**
213 * 返回公历(!)y年m月的天数
214 * @param solar Year
215 * @return Number (-1、28、29、30、31)
216 * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
217 */
218 solarDays: function (y, m) {
219 if (m > 12 || m < 1) { return -1 } //若参数错误 返回-1
220 var ms = m - 1;
221 if (ms == 1) { //2月份的闰平规律测算后确认返回28或29
222 return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28);
223 } else {
224 return (this.solarMonth[ms]);
225 }
226 },
227
228 /**
229 * 农历年份转换为干支纪年
230 * @param lYear 农历年的年份数
231 * @return Cn string
232 */
233 toGanZhiYear: function (lYear) {
234 var ganKey = (lYear - 3) % 10;
235 var zhiKey = (lYear - 3) % 12;
236 if (ganKey == 0) ganKey = 10;//如果余数为0则为最后一个天干
237 if (zhiKey == 0) zhiKey = 12;//如果余数为0则为最后一个地支
238 return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1];
239
240 },
241
242 /**
243 * 公历月、日判断所属星座
244 * @param cMonth [description]
245 * @param cDay [description]
246 * @return Cn string
247 */
248 toAstro: function (cMonth, cDay) {
249 var s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf";
250 var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
251 return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7";//座
252 },
253
254 /**
255 * 传入offset偏移量返回干支
256 * @param offset 相对甲子的偏移量
257 * @return Cn string
258 */
259 toGanZhi: function (offset) {
260 return this.Gan[offset % 10] + this.Zhi[offset % 12];
261 },
262
263 /**
264 * 传入公历(!)y年获得该年第n个节气的公历日期
265 * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
266 * @return day Number
267 * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
268 */
269 getTerm: function (y, n) {
270 if (y < 1900 || y > 2100) { return -1; }
271 if (n < 1 || n > 24) { return -1; }
272 var _table = this.sTermInfo[y - 1900];
273 var _info = [
274 parseInt('0x' + _table.substr(0, 5)).toString(),
275 parseInt('0x' + _table.substr(5, 5)).toString(),
276 parseInt('0x' + _table.substr(10, 5)).toString(),
277 parseInt('0x' + _table.substr(15, 5)).toString(),
278 parseInt('0x' + _table.substr(20, 5)).toString(),
279 parseInt('0x' + _table.substr(25, 5)).toString()
280 ];
281 var _calday = [
282 _info[0].substr(0, 1),
283 _info[0].substr(1, 2),
284 _info[0].substr(3, 1),
285 _info[0].substr(4, 2),
286
287 _info[1].substr(0, 1),
288 _info[1].substr(1, 2),
289 _info[1].substr(3, 1),
290 _info[1].substr(4, 2),
291
292 _info[2].substr(0, 1),
293 _info[2].substr(1, 2),
294 _info[2].substr(3, 1),
295 _info[2].substr(4, 2),
296
297 _info[3].substr(0, 1),
298 _info[3].substr(1, 2),
299 _info[3].substr(3, 1),
300 _info[3].substr(4, 2),
301
302 _info[4].substr(0, 1),
303 _info[4].substr(1, 2),
304 _info[4].substr(3, 1),
305 _info[4].substr(4, 2),
306
307 _info[5].substr(0, 1),
308 _info[5].substr(1, 2),
309 _info[5].substr(3, 1),
310 _info[5].substr(4, 2),
311 ];
312 return parseInt(_calday[n - 1]);
313 },
314
315 /**
316 * 传入农历数字月份返回汉语通俗表示法
317 * @param lunar month
318 * @return Cn string
319 * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
320 */
321 toChinaMonth: function (m) { // 月 => \u6708
322 if (m > 12 || m < 1) { return -1 } //若参数错误 返回-1
323 var s = this.nStr3[m - 1];
324 s += "\u6708";//加上月字
325 return s;
326 },
327
328 /**
329 * 传入农历日期数字返回汉字表示法
330 * @param lunar day
331 * @return Cn string
332 * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
333 */
334 toChinaDay: function (d) { //日 => \u65e5
335 var s;
336 switch (d) {
337 case 10:
338 s = '\u521d\u5341'; break;
339 case 20:
340 s = '\u4e8c\u5341'; break;
341 break;
342 case 30:
343 s = '\u4e09\u5341'; break;
344 break;
345 default:
346 s = this.nStr2[Math.floor(d / 10)];
347 s += this.nStr1[d % 10];
348 }
349 return (s);
350 },
351
352 /**
353 * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
354 * @param y year
355 * @return Cn string
356 * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
357 */
358 getAnimal: function (y) {
359 return this.Animals[(y - 4) % 12]
360 },
361
362 /**
363 * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
364 * @param y solar year
365 * @param m solar month
366 * @param d solar day
367 * @return JSON object
368 * @eg:console.log(calendar.solar2lunar(1987,11,01));
369 */
370 solar2lunar: function (y, m, d) { //参数区间1900.1.31~2100.12.31
371 //年份限定、上限
372 if (y < 1900 || y > 2100) {
373 return -1;// undefined转换为数字变为NaN
374 }
375 //公历传参最下限
376 if (y == 1900 && m == 1 && d < 31) {
377 return -1;
378 }
379 //未传参 获得当天
380 if (!y) {
381 var objDate = new Date();
382 } else {
383 var objDate = new Date(y, parseInt(m) - 1, d)
384 }
385 var i, leap = 0, temp = 0;
386 //修正ymd参数
387 var y = objDate.getFullYear(),
388 m = objDate.getMonth() + 1,
389 d = objDate.getDate();
390 var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000;
391 for (i = 1900; i < 2101 && offset > 0; i++) {
392 temp = this.lYearDays(i);
393 offset -= temp;
394 }
395 if (offset < 0) {
396 offset += temp; i--;
397 }
398
399 //是否今天
400 var isTodayObj = new Date(),
401 isToday = false;
402 if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
403 isToday = true;
404 }
405 //星期几
406 var nWeek = objDate.getDay(),
407 cWeek = this.nStr1[nWeek];
408 //数字表示周几顺应天朝周一开始的惯例
409 if (nWeek == 0) {
410 nWeek = 7;
411 }
412 //农历年
413 var year = i;
414 var leap = this.leapMonth(i); //闰哪个月
415 var isLeap = false;
416
417 //效验闰月
418 for (i = 1; i < 13 && offset > 0; i++) {
419 //闰月
420 if (leap > 0 && i == (leap + 1) && isLeap == false) {
421 --i;
422 isLeap = true; temp = this.leapDays(year); //计算农历闰月天数
423 }
424 else {
425 temp = this.monthDays(year, i);//计算农历普通月天数
426 }
427 //解除闰月
428 if (isLeap == true && i == (leap + 1)) { isLeap = false; }
429 offset -= temp;
430 }
431 // 闰月导致数组下标重叠取反
432 if (offset == 0 && leap > 0 && i == leap + 1) {
433 if (isLeap) {
434 isLeap = false;
435 } else {
436 isLeap = true; --i;
437 }
438 }
439 if (offset < 0) {
440 offset += temp; --i;
441 }
442 //农历月
443 var month = i;
444 //农历日
445 var day = offset + 1;
446 //天干地支处理
447 var sm = m - 1;
448 var gzY = this.toGanZhiYear(year);
449
450 // 当月的两个节气
451 // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
452 var firstNode = this.getTerm(y, (m * 2 - 1));//返回当月「节」为几日开始
453 var secondNode = this.getTerm(y, (m * 2));//返回当月「节」为几日开始
454
455 // 依据12节气修正干支月
456 var gzM = this.toGanZhi((y - 1900) * 12 + m + 11);
457 if (d >= firstNode) {
458 gzM = this.toGanZhi((y - 1900) * 12 + m + 12);
459 }
460
461 //传入的日期的节气与否
462 var isTerm = false;
463 var Term = null;
464 if (firstNode == d) {
465 isTerm = true;
466 Term = this.solarTerm[m * 2 - 2];
467 }
468 if (secondNode == d) {
469 isTerm = true;
470 Term = this.solarTerm[m * 2 - 1];
471 }
472 //日柱 当月一日与 1900/1/1 相差天数
473 var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10;
474 var gzD = this.toGanZhi(dayCyclical + d - 1);
475 //该日期所属的星座
476 var astro = this.toAstro(m, d);
477
478 return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? "\u95f0" : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': "\u661f\u671f" + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro };
479 },
480
481 /**
482 * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
483 * @param y lunar year
484 * @param m lunar month
485 * @param d lunar day
486 * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
487 * @return JSON object
488 * @eg:console.log(calendar.lunar2solar(1987,9,10));
489 */
490 lunar2solar: function (y, m, d, isLeapMonth) { //参数区间1900.1.31~2100.12.1
491 var isLeapMonth = !!isLeapMonth;
492 var leapOffset = 0;
493 var leapMonth = this.leapMonth(y);
494 var leapDay = this.leapDays(y);
495 if (isLeapMonth && (leapMonth != m)) { return -1; }//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
496 if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1; }//超出了最大极限值
497 var day = this.monthDays(y, m);
498 var _day = day;
499 //bugFix 2016-9-25
500 //if month is leap, _day use leapDays method
501 if (isLeapMonth) {
502 _day = this.leapDays(y, m);
503 }
504 if (y < 1900 || y > 2100 || d > _day) { return -1; }//参数合法性效验
505
506 //计算农历的时间差
507 var offset = 0;
508 for (var i = 1900; i < y; i++) {
509 offset += this.lYearDays(i);
510 }
511 var leap = 0, isAdd = false;
512 for (var i = 1; i < m; i++) {
513 leap = this.leapMonth(y);
514 if (!isAdd) {//处理闰月
515 if (leap <= i && leap > 0) {
516 offset += this.leapDays(y); isAdd = true;
517 }
518 }
519 offset += this.monthDays(y, i);
520 }
521 //转换闰月农历 需补充该年闰月的前一个月的时差
522 if (isLeapMonth) { offset += day; }
523 //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
524 var stmap = Date.UTC(1900, 1, 30, 0, 0, 0);
525 var calObj = new Date((offset + d - 31) * 86400000 + stmap);
526 var cY = calObj.getUTCFullYear();
527 var cM = calObj.getUTCMonth() + 1;
528 var cD = calObj.getUTCDate();
529
530 return this.solar2lunar(cY, cM, cD);
531 }
532 };
533
534 // 农历转公历
535 export function toSolar(year, month, day) {
536 // let result = Lunar.toSolar(year, month, day);
537 let result = calendar.lunar2solar(year, month, day);
538 return [result.cYear, result.cMonth, result.cDay];
539 }
...\ No newline at end of file ...\ No newline at end of file