├── app.wxss
├── components
├── rui-datepicker.json
├── rui-datepicker.wxss
├── rui-datepicker.wxml
├── solarlunar.js
└── rui-datepicker.js
├── app.js
├── qiniu_images
├── fe_duzhe.jpg
└── 2018-07-23-21-32-47.png
├── pages
├── index.json
├── index.wxss
├── index.wxml
└── index.js
├── app.json
├── project.config.json
└── README.md
/app.wxss:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/components/rui-datepicker.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true
3 | }
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 | onShow:function(options){
4 | }
5 | })
--------------------------------------------------------------------------------
/qiniu_images/fe_duzhe.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chenruifu/rui-datepicker-wxapp/HEAD/qiniu_images/fe_duzhe.jpg
--------------------------------------------------------------------------------
/pages/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "rui-datepicker": "/components/rui-datepicker"
4 | }
5 | }
--------------------------------------------------------------------------------
/qiniu_images/2018-07-23-21-32-47.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chenruifu/rui-datepicker-wxapp/HEAD/qiniu_images/2018-07-23-21-32-47.png
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index"
4 | ],
5 | "window": {
6 | "backgroundTextStyle": "light",
7 | "navigationBarBackgroundColor": "#000",
8 | "navigationBarTitleText": "公农历日期插件",
9 | "navigationBarTextStyle": "#fff"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "description": "项目配置文件。",
3 | "packOptions": {
4 | "ignore": []
5 | },
6 | "setting": {
7 | "urlCheck": true,
8 | "es6": true,
9 | "postcss": true,
10 | "minified": true,
11 | "newFeature": true
12 | },
13 | "compileType": "miniprogram",
14 | "libVersion": "1.9.98",
15 | "appid": "wxa1861b92bc85a4d1",
16 | "projectname": "%E5%89%8D%E7%AB%AF%E8%AF%BB%E8%80%85",
17 | "isGameTourist": false,
18 | "condition": {
19 | "search": {
20 | "current": -1,
21 | "list": []
22 | },
23 | "conversation": {
24 | "current": -1,
25 | "list": []
26 | },
27 | "game": {
28 | "currentL": -1,
29 | "list": []
30 | },
31 | "miniprogram": {
32 | "current": -1,
33 | "list": []
34 | }
35 | }
36 | }
--------------------------------------------------------------------------------
/pages/index.wxss:
--------------------------------------------------------------------------------
1 | page{background: #444;font-size: 14px/1.2;}
2 | .header{background: #fc0;color: #333;padding:10px;text-align: center;}
3 | .header .h1{font-size: 1.5em;}
4 | .header p{margin:10px 0;}
5 | /*input*/
6 | .date_input{text-align: center;margin:16px 0 0;}
7 | .date_input .p{padding:0 0 8px;font-size: 1.3em;color: #fc0}
8 | .date_input input{height: 50px;font-size: 18px;border: 1px solid #444;border-radius: 5px;margin:0 6%;box-sizing: border-box;background-color: #fff;}
9 | /*submit*/
10 | .fe_duzhe{margin-top: 80rpx;}
11 | .fe_duzhe view{width: 88%;font-size: 16px;border: 1px solid #444;border-radius: 5px;margin:0 auto 20rpx;box-sizing: border-box;background-color: #fc0;color: #333;padding:20rpx;text-align: center;}
12 | .fe_duzhe text{font-size: 1.2em;display: block}
13 | .fe_duzhe image{width: 100%;display: block}
--------------------------------------------------------------------------------
/pages/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
21 |
22 |
23 | 前端读者(欢迎关注,技术文刊日更)
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 微信小程序公农历日期选择器组件(rui-datepicker-wxapp)
2 |
3 | - 支持公历农历切换,带时辰和不带时辰...
4 | - 时间区间:1940-2-8至明年12-31(可修改代码调整)
5 |
6 | ### 效果
7 |
8 | 
9 |
10 | ### 小程序二维码
11 |
12 | 
13 |
14 | ### 使用方法
15 | ```html
16 |
17 |
18 | ```
19 |
20 | ```js
21 | // json载入组件
22 | {
23 | "usingComponents": {
24 | "rui-datepicker": "/components/rui-datepicker"
25 | }
26 | }
27 | ```
28 |
29 | ```js
30 | // 获取日期组件对象实例,并初始化配置
31 | this.selectComponent("#ruiDatepicker").init({
32 | date: '2017-12-31',
33 | hour: '-1',
34 | lunar: false
35 | });
36 | ```
37 |
38 | 具体参数配置及其默认参数:
39 |
40 | ```
41 | confirm: true, //是否需要确认
42 | date: '1991-12-31', //默认日期(新历)
43 | hour: '-1', //默认时辰,未知
44 | showHour: true, //是否有时辰选项
45 | lunar: true, //默认展示农历
46 | ```
47 |
48 | 统一确认回调函数上面绑定的 `bind:confirm`:
49 |
50 | ```js
51 | dateConfirm(event) {
52 | console.log(event.detail)
53 | }
54 | ```
55 | `event.detail`对应的数据:
56 |
57 | ```
58 | year: 1991 //公历年
59 | month: 12 //公历月
60 | day: 31 //公历日
61 | hour: -1 //时辰,-1未知时辰
62 | isLeap: false //农历是否是闰年
63 | lYear: 1991 //农历年
64 | lMonth: 11 //农历月
65 | lDay: 26 //农历日
66 | lastTab: "solar" //最后选择的是农历(lunar)还是公历(solar)
67 |
68 | lunarStr: "农历:1991年十一月廿六 时辰未知"
69 | solarStr: "公历:1991年12月31日 时辰未知"
70 | thisStr: "公历:1991年12月31日 时辰未知"
71 | ```
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/components/rui-datepicker.wxss:
--------------------------------------------------------------------------------
1 | /*遮罩层*/
2 | .datepicker_shade{position: fixed;width: 100%;height: 100%;top:0;left:0;background-color: rgba(0, 0, 0, 0.2);z-index:12;display: none;}
3 | /*日期选择框架*/
4 | .datepicker_wrap{position: fixed;width: 90%;left:5%;top:50%;background-color: #fff;box-shadow: 0 0 2px rgba(0,0,0,.4);border-radius: 10rpx;transform: translate3d(0,-300%,0);transition: transform .5s ease-out;z-index: 31;}
5 | .datepicker_topinfo{color: #363837;font-size: 18px;text-align: center;padding: 20rpx 0;border-bottom: 1px solid #d4d4d4;font-weight: 700;}
6 | .datepicker_select{position: relative;text-align: center;}
7 | .datepicker_class{padding:20rpx 0;}
8 | .datepicker_class view{display: inline-block;font-size: 14px;width:30%;padding:10rpx 0;text-align: center;color: #c91723;border:1px solid #c91723;}
9 | .datepicker_class view:first-child{border-top-left-radius: 10rpx;border-bottom-left-radius: 10rpx}
10 | .datepicker_class view:last-child{border-top-right-radius: 10rpx;border-bottom-right-radius: 10rpx}
11 | .datepicker_class .active{background-color: #c91723;color: #fff}
12 | .datepicker_select .select_wrap{width: 100%;height: 120px;background-color: #f0f0f0;}
13 | .datepicker_select .column_class{border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4;}
14 | .datepicker_confirm{padding:30rpx 20rpx;font-size: 16px;text-align: center;}
15 | .datepicker_confirm .tip{color: #666;margin-bottom: 20rpx;}
16 | .datepicker_confirm .p{line-height: 24px;}
17 | .datepicker_confirm .p text{color: #c91723}
18 | .datepicker_bottom{overflow: hidden;position: relative;border-top:1px solid #d4d4d4;margin-top: 20rpx;}
19 | .datepicker_bottom view{color: #000;font-size: 16px;text-align: center;padding: 20rpx 0;float: left;width: 50%;box-sizing: border-box;}
20 | .datepicker_bottom view:last-child{background-color: #d00b0b;color: #fff;border-bottom-right-radius: 10rpx}
21 | /*活动状态*/
22 | .datepicker_shade_active{display: block;}
23 | .datepicker_wrap_active{transform: translate3d(0,-60%,0);}
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | //当前选中id
2 | let thisDatePickerId = '';
3 | Page({
4 | data: {
5 | dateStr1: '',
6 | date1: '',
7 | hour1: '',
8 | dateStr2: '',
9 | date2: '',
10 | dateStr3: '',
11 | date3: '',
12 | hour3: ''
13 | },
14 | onLoad() {
15 | },
16 | // 带时辰
17 | showDatepicker1(event) {
18 | thisDatePickerId = 1;
19 | let date = this.data['date'+thisDatePickerId];
20 | let hour = this.data['hour'+thisDatePickerId];
21 | // 获取日期组件对象实例,并初始化配置
22 | this.selectComponent("#ruiDatepicker").init({
23 | date: date,
24 | hour: hour,
25 | lunar: false
26 | });
27 | },
28 | // 不带时辰
29 | showDatepicker2(event) {
30 | thisDatePickerId = 2;
31 | let date = this.data['date'+thisDatePickerId];
32 | // 获取日期组件对象实例,并初始化配置
33 | this.selectComponent("#ruiDatepicker").init({
34 | date: date,
35 | showHour: false
36 | });
37 | },
38 | // 带时辰(不需要确认)
39 | showDatepicker3(event) {
40 | thisDatePickerId = 3;
41 | let date = this.data['date'+thisDatePickerId];
42 | let hour = this.data['hour'+thisDatePickerId];
43 | // 获取日期组件对象实例,并初始化配置
44 | this.selectComponent("#ruiDatepicker").init({
45 | date: date,
46 | hour: hour,
47 | confirm: false
48 | });
49 | },
50 | dateConfirm(event) {
51 | let json = {};
52 | json['date'+thisDatePickerId] = event.detail.year+'-'+event.detail.month+'-'+event.detail.day;
53 | json['hour'+thisDatePickerId] = event.detail.hour;
54 | json['dateStr'+thisDatePickerId] = event.detail.thisStr;
55 | // 更新数据
56 | this.setData(json);
57 | console.log(event);
58 | },
59 | // 打开前端读者二维码图片
60 | openImage() {
61 | wx.previewImage({
62 | urls: ['http://cdn.chenrf.com/0.jpg']
63 | })
64 | }
65 | })
--------------------------------------------------------------------------------
/components/rui-datepicker.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{!hiddenConfirm ? '确认日期' : lunarTab?returnDate.lunarStr:returnDate.solarStr}}
4 |
5 |
6 | 公历
7 | 农历
8 |
9 |
10 |
11 | {{item}}
12 |
13 |
14 | {{item}}
15 |
16 |
17 | {{item}}
18 |
19 |
20 | {{item}}
21 |
22 |
23 |
24 |
25 | 请确认输入的时间是否正确
26 | {{returnDate.solarStr}}
27 | {{returnDate.lunarStr}}
28 |
29 |
30 | {{hiddenConfirm ? '取消' : '返回修改'}}
31 | {{hiddenConfirm ? '完成' : '确认'}}
32 |
33 |
--------------------------------------------------------------------------------
/components/solarlunar.js:
--------------------------------------------------------------------------------
1 | !function(b,f){"object"==typeof exports&&"object"==typeof module?module.exports=f():"function"==typeof define&&define.amd?define("solarlunar",[],f):"object"==typeof exports?exports.solarlunar=f():b.solarlunar=f()}(this,function(){return function(b){function f(c){if(e[c])return e[c].exports;var t=e[c]={i:c,l:!1,exports:{}};return b[c].call(t.exports,t,t.exports,f),t.l=!0,t.exports}var e={};return f.m=b,f.c=e,f.d=function(b,e,c){f.o(b,e)||Object.defineProperty(b,e,{configurable:!1,enumerable:!0,get:c})},f.n=function(b){var e=b&&b.__esModule?function(){return b.default}:function(){return b};return f.d(e,"a",e),e},f.o=function(b,f){return Object.prototype.hasOwnProperty.call(b,f)},f.p="",f(f.s=0)}([function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0});var c=e(1),t=function(b){return b&&b.__esModule?b:{default:b}}(c);f.default=t.default,b.exports=f.default},function(b,f,e){"use strict";function c(b){return b&&b.__esModule?b:{default:b}}Object.defineProperty(f,"__esModule",{value:!0});var t=e(2),r=c(t),a=e(3),n=c(a),d=e(4),u=c(d),s=e(5),o=c(s),l=e(6),i=c(l),p=e(7),y=c(p),h=e(8),v=c(h),M=e(9),g=c(M),_=e(10),D=c(_),x=e(11),m=c(x),j=e(12),I=c(j),S={lunarInfo:r.default,solarMonth:n.default,gan:u.default,zhi:o.default,animals:i.default,lunarTerm:y.default,lTermInfo:v.default,nStr1:g.default,nStr2:D.default,nStr3:m.default,nStr4:I.default,lYearDays:function(b){var f,e=348;for(f=32768;f>8;f>>=1)e+=S.lunarInfo[b-1900]&f?1:0;return e+S.leapDays(b)},leapMonth:function(b){return 15&S.lunarInfo[b-1900]},leapDays:function(b){return S.leapMonth(b)?65536&S.lunarInfo[b-1900]?30:29:0},monthDays:function(b,f){return f>12||f<1?-1:S.lunarInfo[b-1900]&65536>>f?30:29},solarDays:function(b,f){if(f>12||f<1)return-1;var e=f-1;return 1==e?b%4==0&&b%100!=0||b%400==0?29:28:S.solarMonth[e]},toGanZhi:function(b){return S.gan[b%10]+S.zhi[b%12]},getTerm:function(b,f){if(b<1900||b>2100)return-1;if(f<1||f>24)return-1;var e=S.lTermInfo[b-1900],c=[parseInt("0x"+e.substr(0,5)).toString(),parseInt("0x"+e.substr(5,5)).toString(),parseInt("0x"+e.substr(10,5)).toString(),parseInt("0x"+e.substr(15,5)).toString(),parseInt("0x"+e.substr(20,5)).toString(),parseInt("0x"+e.substr(25,5)).toString()],t=[c[0].substr(0,1),c[0].substr(1,2),c[0].substr(3,1),c[0].substr(4,2),c[1].substr(0,1),c[1].substr(1,2),c[1].substr(3,1),c[1].substr(4,2),c[2].substr(0,1),c[2].substr(1,2),c[2].substr(3,1),c[2].substr(4,2),c[3].substr(0,1),c[3].substr(1,2),c[3].substr(3,1),c[3].substr(4,2),c[4].substr(0,1),c[4].substr(1,2),c[4].substr(3,1),c[4].substr(4,2),c[5].substr(0,1),c[5].substr(1,2),c[5].substr(3,1),c[5].substr(4,2)];return parseInt(t[f-1])},toChinaYear:function(b){var f=parseInt(b/1e3),e=parseInt(b%1e3/100),c=parseInt(b%100/10),t=b%10;return S.nStr4[f]+S.nStr4[e]+S.nStr4[c]+S.nStr4[t]+"年"},toChinaMonth:function(b){if(b>12||b<1)return-1;var f=S.nStr3[b-1];return f+="月"},toChinaDay:function(b){var f;switch(b){case 10:f="初十";break;case 20:f="二十";break;case 30:f="三十";break;default:f=S.nStr2[Math.floor(b/10)],f+=S.nStr1[b%10]}return f},getAnimal:function(b){return S.animals[(b-4)%12]},solar2lunar:function(b,f,e){if(b<1900||b>2100)return-1;if(1900==b&&1==f&&e<31)return-1;if(b)var c=new Date(b,parseInt(f)-1,e);else var c=new Date;var t,r=0,a=0,b=c.getFullYear(),f=c.getMonth()+1,e=c.getDate(),n=(Date.UTC(c.getFullYear(),c.getMonth(),c.getDate())-Date.UTC(1900,0,31))/864e5;for(t=1900;t<2101&&n>0;t++)a=S.lYearDays(t),n-=a;n<0&&(n+=a,t--);var d=new Date,u=!1;d.getFullYear()==b&&d.getMonth()+1==f&&d.getDate()==e&&(u=!0);var s=c.getDay(),o=S.nStr1[s];0==s&&(s=7);var l=t,r=S.leapMonth(t),i=!1;for(t=1;t<13&&n>0;t++)r>0&&t==r+1&&0==i?(--t,i=!0,a=S.leapDays(l)):a=S.monthDays(l,t),1==i&&t==r+1&&(i=!1),n-=a;0==n&&r>0&&t==r+1&&(i?i=!1:(i=!0,--t)),n<0&&(n+=a,--t);var p=t,y=n+1,h=f-1,v=S.getTerm(l,3),M=S.toGanZhi(l-4);M=h<2&&e=g&&(D=S.toGanZhi(12*(b-1900)+f+12));var x=!1,m="";g==e&&(x=!0,m=S.lunarTerm[2*f-2]),_==e&&(x=!0,m=S.lunarTerm[2*f-1]);var j=Date.UTC(b,h,1,0,0,0,0)/864e5+25567+10,I=S.toGanZhi(j+e-1);return{lYear:l,lMonth:p,lDay:y,animal:S.getAnimal(l),yearCn:S.toChinaYear(l),monthCn:(i?"闰":"")+S.toChinaMonth(p),dayCn:S.toChinaDay(y),cYear:b,cMonth:f,cDay:e,gzYear:M,gzMonth:D,gzDay:I,isToday:u,isLeap:i,nWeek:s,ncWeek:"星期"+o,isTerm:x,term:m}},lunar2solar:function(b,f,e,c){var t=S.leapMonth(b);S.leapDays(b);if(c&&t!=f)return-1;if(2100==b&&12==f&&e>1||1900==b&&1==f&&e<31)return-1;var r=S.monthDays(b,f);if(b<1900||b>2100||e>r)return-1;for(var a=0,n=1900;n0&&(a+=S.leapDays(b),u=!0),a+=S.monthDays(b,n);c&&(a+=r);var s=Date.UTC(1900,1,30,0,0,0),o=new Date(864e5*(a+e-31)+s),l=o.getUTCFullYear(),i=o.getUTCMonth()+1,p=o.getUTCDate();return S.solar2lunar(l,i,p)}};f.default=S,b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=[19416,19168,42352,21717,53856,55632,91476,22176,39632,21970,19168,42422,42192,53840,119381,46400,54944,44450,38320,84343,18800,42160,46261,27216,27968,109396,11104,38256,21234,18800,25958,54432,59984,28309,23248,11104,100067,37600,116951,51536,54432,120998,46416,22176,107956,9680,37584,53938,43344,46423,27808,46416,86869,19872,42416,83315,21168,43432,59728,27296,44710,43856,19296,43748,42352,21088,62051,55632,23383,22176,38608,19925,19152,42192,54484,53840,54616,46400,46752,103846,38320,18864,43380,42160,45690,27216,27968,44870,43872,38256,19189,18800,25776,29859,59984,27480,21952,43872,38613,37600,51552,55636,54432,55888,30034,22176,43959,9680,37584,51893,43344,46240,47780,44368,21977,19360,42416,86390,21168,43312,31060,27296,44368,23378,19296,42726,42208,53856,60005,54576,23200,30371,38608,19415,19152,42192,118966,53840,54560,56645,46496,22224,21938,18864,42359,42160,43600,111189,27936,44448,84835,37744,18936,18800,25776,92326,59984,27424,108228,43744,41696,53987,51552,54615,54432,55888,23893,22176,42704,21972,21200,43448,43344,46240,46758,44368,21920,43940,42416,21168,45683,26928,29495,27296,44368,84821,19296,42352,21732,53600,59752,54560,55968,92838,22224,19168,43476,41680,53584,62034,54560],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=[31,28,31,30,31,30,31,31,30,31,30,31],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c3598082c95f8c965cc920f","97bd0b06bdb0722c965ce1cfcc920f","b027097bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c359801ec95f8c965cc920f","97bd0b06bdb0722c965ce1cfcc920f","b027097bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c359801ec95f8c965cc920f","97bd0b06bdb0722c965ce1cfcc920f","b027097bd097c36b0b6fc9274c91aa","9778397bd19801ec9210c965cc920e","97b6b97bd19801ec95f8c965cc920f","97bd09801d98082c95f8e1cfcc920f","97bd097bd097c36b0b6fc9210c8dc2","9778397bd197c36c9210c9274c91aa","97b6b97bd19801ec95f8c965cc920e","97bd09801d98082c95f8e1cfcc920f","97bd097bd097c36b0b6fc9210c8dc2","9778397bd097c36c9210c9274c91aa","97b6b97bd19801ec95f8c965cc920e","97bcf97c3598082c95f8e1cfcc920f","97bd097bd097c36b0b6fc9210c8dc2","9778397bd097c36c9210c9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c3598082c95f8c965cc920f","97bd097bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c3598082c95f8c965cc920f","97bd097bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c359801ec95f8c965cc920f","97bd097bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c359801ec95f8c965cc920f","97bd097bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf97c359801ec95f8c965cc920f","97bd097bd07f595b0b6fc920fb0722","9778397bd097c36b0b6fc9210c8dc2","9778397bd19801ec9210c9274c920e","97b6b97bd19801ec95f8c965cc920f","97bd07f5307f595b0b0bc920fb0722","7f0e397bd097c36b0b6fc9210c8dc2","9778397bd097c36c9210c9274c920e","97b6b97bd19801ec95f8c965cc920f","97bd07f5307f595b0b0bc920fb0722","7f0e397bd097c36b0b6fc9210c8dc2","9778397bd097c36c9210c9274c91aa","97b6b97bd19801ec9210c965cc920e","97bd07f1487f595b0b0bc920fb0722","7f0e397bd097c36b0b6fc9210c8dc2","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf7f1487f595b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf7f1487f595b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf7f1487f531b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c965cc920e","97bcf7f1487f531b0b0bb0b6fb0722","7f0e397bd07f595b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b97bd19801ec9210c9274c920e","97bcf7f0e47f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","9778397bd097c36b0b6fc9210c91aa","97b6b97bd197c36c9210c9274c920e","97bcf7f0e47f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","9778397bd097c36b0b6fc9210c8dc2","9778397bd097c36c9210c9274c920e","97b6b7f0e47f531b0723b0b6fb0722","7f0e37f5307f595b0b0bc920fb0722","7f0e397bd097c36b0b6fc9210c8dc2","9778397bd097c36b0b70c9274c91aa","97b6b7f0e47f531b0723b0b6fb0721","7f0e37f1487f595b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc9210c8dc2","9778397bd097c36b0b6fc9274c91aa","97b6b7f0e47f531b0723b0b6fb0721","7f0e27f1487f595b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","9778397bd097c36b0b6fc9274c91aa","97b6b7f0e47f531b0723b0787b0721","7f0e27f0e47f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","9778397bd097c36b0b6fc9210c91aa","97b6b7f0e47f149b0723b0787b0721","7f0e27f0e47f531b0723b0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","9778397bd097c36b0b6fc9210c8dc2","977837f0e37f149b0723b0787b0721","7f07e7f0e47f531b0723b0b6fb0722","7f0e37f5307f595b0b0bc920fb0722","7f0e397bd097c35b0b6fc9210c8dc2","977837f0e37f14998082b0787b0721","7f07e7f0e47f531b0723b0b6fb0721","7f0e37f1487f595b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc9210c8dc2","977837f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","977837f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd097c35b0b6fc920fb0722","977837f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","977837f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","977837f0e37f14998082b0787b06bd","7f07e7f0e47f149b0723b0787b0721","7f0e27f0e47f531b0b0bb0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","977837f0e37f14998082b0723b06bd","7f07e7f0e37f149b0723b0787b0721","7f0e27f0e47f531b0723b0b6fb0722","7f0e397bd07f595b0b0bc920fb0722","977837f0e37f14898082b0723b02d5","7ec967f0e37f14998082b0787b0721","7f07e7f0e47f531b0723b0b6fb0722","7f0e37f1487f595b0b0bb0b6fb0722","7f0e37f0e37f14898082b0723b02d5","7ec967f0e37f14998082b0787b0721","7f07e7f0e47f531b0723b0b6fb0722","7f0e37f1487f531b0b0bb0b6fb0722","7f0e37f0e37f14898082b0723b02d5","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e37f1487f531b0b0bb0b6fb0722","7f0e37f0e37f14898082b072297c35","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e37f0e37f14898082b072297c35","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e37f0e366aa89801eb072297c35","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f149b0723b0787b0721","7f0e27f1487f531b0b0bb0b6fb0722","7f0e37f0e366aa89801eb072297c35","7ec967f0e37f14998082b0723b06bd","7f07e7f0e47f149b0723b0787b0721","7f0e27f0e47f531b0723b0b6fb0722","7f0e37f0e366aa89801eb072297c35","7ec967f0e37f14998082b0723b06bd","7f07e7f0e37f14998083b0787b0721","7f0e27f0e47f531b0723b0b6fb0722","7f0e37f0e366aa89801eb072297c35","7ec967f0e37f14898082b0723b02d5","7f07e7f0e37f14998082b0787b0721","7f07e7f0e47f531b0723b0b6fb0722","7f0e36665b66aa89801e9808297c35","665f67f0e37f14898082b0723b02d5","7ec967f0e37f14998082b0787b0721","7f07e7f0e47f531b0723b0b6fb0722","7f0e36665b66a449801e9808297c35","665f67f0e37f14898082b0723b02d5","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e36665b66a449801e9808297c35","665f67f0e37f14898082b072297c35","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e26665b66a449801e9808297c35","665f67f0e37f1489801eb072297c35","7ec967f0e37f14998082b0787b06bd","7f07e7f0e47f531b0723b0b6fb0721","7f0e27f1487f531b0b0bb0b6fb0722"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["日","一","二","三","四","五","六","七","八","九","十"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["初","十","廿","卅"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["正","二","三","四","五","六","七","八","九","十","冬","腊"],b.exports=f.default},function(b,f,e){"use strict";Object.defineProperty(f,"__esModule",{value:!0}),f.default=["零","一","二","三","四","五","六","七","八","九","十"],b.exports=f.default}])});
--------------------------------------------------------------------------------
/components/rui-datepicker.js:
--------------------------------------------------------------------------------
1 | import solarLunar from './solarlunar';
2 | // 设置年份数组1940-明年
3 | const thisYear = new Date().getFullYear() + 1;
4 | const dafaultYearArr = [];
5 | for (let i = 1940; i <= thisYear; i++) {
6 | dafaultYearArr.push(i);
7 | }
8 | // 日期选择最大值最小值
9 | const solarMinMonth = 2;
10 | const solarMinDay = 8;
11 | const maxLunar = solarLunar.solar2lunar(thisYear, 12, 31);
12 | const lunarMaxMonth = maxLunar.lMonth;
13 | const lunarMaxDay = maxLunar.lDay;
14 |
15 | // 默认初始配置数据
16 | const dafaultConfig = {
17 | confirm: true,//是否需要确认
18 | date: '1991-1-6',//默认日期(新历)
19 | hour: '-1',//默认时辰,未知
20 | showHour: true,//是否有时辰选项
21 | lunar: true,//默认展示农历
22 | }
23 | Component({
24 | // 组件的内部数据
25 | data: {
26 | // 默认初始配置数据
27 | config: {},
28 | returnDate: {
29 | lastTab: 'lunar',//最后确认tab,农历lunsr,公历solar
30 | year: '',//公历年
31 | month: '',//公历月
32 | day: '',//公历日
33 | lYear: '',//农历年
34 | lMonth: '',//农历月
35 | lDay: '',//农历日
36 | isLeap: '',//农历月是否为闰月
37 | lunarStr: '',//农历: 1991年十一月廿六 0子时
38 | solarStr: '',//公历: 1991年12月31日 0时
39 | thisStr:'',//当前在什么下返回
40 | hour: '',//时辰,为空表示不需要时辰,-1为未知时辰
41 | },
42 | // 选择块数据
43 | selectArr: [],
44 | yearArr: dafaultYearArr,
45 | monthArr: [],
46 | dayArr: [],
47 | hourArr: [],
48 | // 当前tab
49 | lunarTab: true,
50 | // 是否显示
51 | isShow: false,
52 | // 确认块隐藏
53 | hiddenConfirm: true,
54 | },
55 | //组件的方法列表,内部方法_开头
56 | methods: {
57 | // 确认完成
58 | confirm() {
59 | // 判断是否需要确认
60 | if(this.data.config.confirm){
61 | // 判断是否在确认步骤[完成&确认]
62 | if(this.data.hiddenConfirm === false){
63 | this.setData({
64 | isShow: false,
65 | hiddenConfirm: true
66 | });
67 | this.triggerEvent('confirm', this.data.returnDate);
68 | }else{
69 | this.setData({
70 | hiddenConfirm: false
71 | });
72 | }
73 | }else{
74 | this.setData({
75 | isShow: false,
76 | hiddenConfirm: true
77 | });
78 | this.triggerEvent('confirm', this.data.returnDate);
79 | }
80 | },
81 | // 初始化插件数据并显示
82 | init(param) {
83 | // 合并对象,以默认配置为基础,返回新配置
84 | let defaultSet = Object.assign({}, dafaultConfig, param);
85 | // 检测数据合法性
86 | defaultSet = this._checkConfig(defaultSet);
87 | // 默认农历
88 | if(defaultSet.lunar == true){
89 | //载入农历数据
90 | this._initlunar(defaultSet.date, defaultSet.hour);
91 | }else{
92 | //载入公历数据
93 | this._initsolar(defaultSet.date, defaultSet.hour);
94 | }
95 | // 设置配置,显示组件
96 | this.setData({
97 | lunarTab: defaultSet.lunar === true ? true : false,
98 | config: defaultSet,
99 | isShow: true
100 | });
101 | // 设置当前日期返回数据
102 | this._setReturnDate();
103 | },
104 | // 取消
105 | _cancel() {
106 | // 判断是否在确认步骤[返回修改&取消]
107 | if(this.data.hiddenConfirm === false){
108 | this.setData({
109 | hiddenConfirm: true
110 | })
111 | }else{
112 | this.setData({
113 | isShow: false
114 | });
115 | }
116 | },
117 | // 检测配置的合法性,防止程序报错
118 | _checkConfig(conf) {
119 | // 是否需要确认:只能true 或 false
120 | if(typeof conf.confirm != 'boolean'){
121 | conf.confirm = dafaultConfig.confirm
122 | }
123 | // 是否有时辰选项:只能true 或 false
124 | if(typeof conf.showHour != 'boolean'){
125 | conf.showHour = dafaultConfig.showHour
126 | }
127 | // 默认展示农历:只能true 或 false
128 | if(typeof conf.lunar != 'boolean'){
129 | conf.lunar = dafaultConfig.lunar
130 | }
131 | // 时辰格式,区间[-1,24]
132 | if(parseInt(conf.hour) < -1 || parseInt(conf.hour)>24 || conf.hour==''){
133 | conf.hour = dafaultConfig.hour
134 | }
135 | // 日期格式,1991-12-31
136 | let confDate = new Date(conf.date);
137 | if(confDate == 'Invalid Date' || confDate.getFullYear() < 1940 || confDate.getFullYear() > 2030){
138 | conf.date = dafaultConfig.date
139 | }
140 | return conf;
141 | },
142 | // 公农历切换
143 | _solarLunarChange(event) {
144 | const type = event.currentTarget.dataset.type;
145 | const thisDate = this.data.returnDate;
146 |
147 | // 农历下点击公历切换
148 | if(this.data.lunarTab !== true && type=='lunar'){
149 | this.setData({
150 | lunarTab: true
151 | })
152 | this._initlunar(thisDate.year+'-'+thisDate.month+'-'+thisDate.day, thisDate.hour);
153 | }
154 | // 公历下点击农历切换
155 | if(this.data.lunarTab === true && type=='solar'){
156 | this.setData({
157 | lunarTab: false
158 | })
159 | this._initsolar(thisDate.year+'-'+thisDate.month+'-'+thisDate.day, thisDate.hour);
160 | }
161 | this._setReturnDate();
162 | },
163 | // 切换picker
164 | _pickerChange(event) {
165 | let selectArr = event.detail.value;
166 | if(this.data.lunarTab === true){
167 | //在农历下
168 | // 该年是否有闰月,0没有
169 | const leapMonth = solarLunar.leapMonth(selectArr[0]+1940);
170 | const oldMonthArr = this.data.monthArr;
171 | // 刷新月份数组
172 | let monthArr = [];
173 | for (let i = 1; i <= 12; i++) {
174 | monthArr.push(this._getLunarName('month',i));
175 | // 判断是否有闰月
176 | if(leapMonth > 0 && i == leapMonth){
177 | monthArr.push('闰'+this._getLunarName('month',i));
178 | }
179 | }
180 |
181 | // 日期数组
182 | let dayArr = [];
183 | let maxDay;
184 | //判断是否有闰月
185 | if(leapMonth > 0){
186 | if(selectArr[1] < leapMonth){
187 | //月份小于闰月,+1
188 | maxDay = solarLunar.monthDays(selectArr[0]+1940, selectArr[1]+1)
189 | }else{
190 | if(selectArr[1] == leapMonth){
191 | maxDay = solarLunar.leapDays(selectArr[0]+1940, leapMonth)
192 | }else{
193 | // 月份大于闰月
194 | maxDay = solarLunar.monthDays(selectArr[0]+1940, selectArr[1])
195 | }
196 | }
197 | }else{
198 | //没有闰月,+1 (有闰月切换没闰月最大值处理)
199 | let thisMonth = (selectArr[1] + 1) > monthArr.length ? monthArr.length : (selectArr[1] + 1);
200 | maxDay = solarLunar.monthDays(selectArr[0]+1940, thisMonth);
201 | }
202 | for (let i = 1; i <= maxDay; i++) {
203 | dayArr.push(this._getLunarName('day',i));
204 | }
205 | // 年切换月份位置修正:有闰年 -> 没闰年
206 | if(oldMonthArr.length > monthArr.length){
207 | let oldLeapMonth = 0;
208 | for(let i = 0, max = oldMonthArr.length; i < max; i++){
209 | if('' + oldMonthArr[i].indexOf('闰') >= 0){
210 | oldLeapMonth = i;
211 | }
212 | }
213 | selectArr[1] = ((selectArr[1] + 1) > oldLeapMonth) ? selectArr[1] -1 : selectArr[1];
214 | }
215 | // 年份切换月份位置修正:没闰年 -> 有闰年
216 | if(oldMonthArr.length < monthArr.length){
217 | selectArr[1] = ((selectArr[1] + 1) > leapMonth) ? selectArr[1] +1 : selectArr[1];
218 | }
219 | // 判断是否超出月份最大值(有闰年切换没闰年的情况)
220 | selectArr[1] = selectArr[1] >= monthArr.length ? (monthArr.length-1) : selectArr[1];
221 | // 判断是否超出日期最大值
222 | selectArr[2] = selectArr[2] >= maxDay ? maxDay-1 : selectArr[2];
223 | // 判断到达年份最大
224 | if(selectArr[0] == thisYear - 1940){
225 | // 有无闰月
226 | if(leapMonth > 0){
227 | selectArr[1] = selectArr[1] > lunarMaxMonth ? lunarMaxMonth : selectArr[1];
228 | // 日期最大值
229 | if(selectArr[1] == lunarMaxMonth && (selectArr[2]+1) > lunarMaxDay){
230 | selectArr[2] = lunarMaxDay - 1;
231 | }
232 | }else{
233 | selectArr[1] = selectArr[1] > lunarMaxMonth-1 ? lunarMaxMonth-1 : selectArr[1];
234 | // 日期最大值
235 | if(selectArr[1] == (lunarMaxMonth-1) && (selectArr[2]+1) > lunarMaxDay){
236 | selectArr[2] = lunarMaxDay - 1;
237 | }
238 | }
239 | }
240 | // 更新+最大值选择
241 | this.setData({
242 | monthArr: monthArr,
243 | dayArr: dayArr,
244 | selectArr: selectArr
245 | })
246 | }else{
247 | //在公历下
248 | // 刷新日期数组
249 | let dayArr = [];
250 | let maxDay = solarLunar.solarDays(selectArr[0]+1940, selectArr[1]+1);
251 | for (let i = 1; i <= maxDay; i++) {
252 | dayArr.push(i);
253 | }
254 | // 判断是否超出日期最大值
255 | selectArr[2] = selectArr[2] >= maxDay ? maxDay-1 : selectArr[2];
256 | // 判断月份是否到达最小
257 | if(selectArr[0] == 0 && (selectArr[1]+1) < solarMinMonth) {
258 | selectArr[1] = solarMinMonth - 1;
259 | }
260 | //判断年份月份到达最小
261 | if(selectArr[0] == 0 && (selectArr[1]+1) == solarMinMonth && (selectArr[2]+1) < solarMinDay) {
262 | selectArr[2] = solarMinDay - 1;
263 | }
264 | // 更新日期+最小值选择
265 | this.setData({
266 | selectArr: selectArr,
267 | dayArr: dayArr
268 | })
269 | }
270 | // 设置当前日期返回数据
271 | this._setReturnDate();
272 | },
273 | // 设置返回数据,每次切换执行
274 | _setReturnDate() {
275 | // 微信picker-view的bug,重新设置位置
276 | this.setData({
277 | selectArr: this.data.selectArr
278 | })
279 | const selectArr = this.data.selectArr;
280 | let thisDateJson = {};
281 | thisDateJson.hour = this.data.config.showHour === false ? '' : selectArr[3] - 1;
282 | if(this.data.lunarTab === true){
283 | //农历下
284 | thisDateJson.lastTab = 'lunar';
285 | // 公历数据
286 | thisDateJson.lYear = selectArr[0] + 1940;
287 | const leapMonth = solarLunar.leapMonth(selectArr[0]+1940);
288 | if(leapMonth > 0){
289 | thisDateJson.lMonth = selectArr[1] >= leapMonth ? selectArr[1] : selectArr[1] + 1;
290 | }else{
291 | thisDateJson.lMonth = selectArr[1] + 1;
292 | }
293 | thisDateJson.lDay = selectArr[2] + 1;
294 | thisDateJson.isLeap = (leapMonth > 0 && selectArr[1] == leapMonth)?true:false;
295 | if(thisDateJson.isLeap == true){
296 | thisDateJson.lunarStr = '农历:'+ thisDateJson.lYear+'年闰'+this._getLunarName('month', thisDateJson.lMonth)+''+this._getLunarName('day', thisDateJson.lDay);
297 | }else{
298 | thisDateJson.lunarStr = '农历:'+ thisDateJson.lYear+'年'+this._getLunarName('month', thisDateJson.lMonth)+''+this._getLunarName('day', thisDateJson.lDay);
299 | }
300 | // 农历数据
301 | let solarData = solarLunar.lunar2solar(thisDateJson.lYear, thisDateJson.lMonth, thisDateJson.lDay, thisDateJson.isLeap);
302 | thisDateJson.year = solarData.cYear;
303 | thisDateJson.month = solarData.cMonth;
304 | thisDateJson.day = solarData.cDay;
305 | thisDateJson.solarStr = '公历:'+ thisDateJson.year+'年'+thisDateJson.month+'月'+thisDateJson.day+'日';
306 | }else{
307 | //公历下
308 | thisDateJson.lastTab = 'solar';
309 | // 公历数据
310 | thisDateJson.year = selectArr[0] + 1940;
311 | thisDateJson.month = selectArr[1] + 1;
312 | thisDateJson.day = selectArr[2] + 1;
313 | thisDateJson.solarStr = '公历:'+ thisDateJson.year+'年'+thisDateJson.month+'月'+thisDateJson.day+'日';
314 | // 农历数据
315 | let lunarData = solarLunar.solar2lunar(thisDateJson.year, thisDateJson.month, thisDateJson.day);
316 | thisDateJson.lYear = lunarData.lYear;
317 | thisDateJson.lMonth = lunarData.lMonth;
318 | thisDateJson.lDay = lunarData.lDay;
319 | thisDateJson.isLeap = lunarData.isLeap;
320 | if(thisDateJson.isLeap == true){
321 | thisDateJson.lunarStr = '农历:'+ thisDateJson.lYear+'年闰'+this._getLunarName('month', thisDateJson.lMonth)+''+this._getLunarName('day', thisDateJson.lDay);
322 | }else{
323 | thisDateJson.lunarStr = '农历:'+ thisDateJson.lYear+'年'+this._getLunarName('month', thisDateJson.lMonth)+''+this._getLunarName('day', thisDateJson.lDay);
324 | }
325 | }
326 | // 判断是否有选择时辰
327 | if(thisDateJson.hour !== ''){
328 | thisDateJson.solarStr += ' '+ (thisDateJson.hour<0?'时辰未知': (thisDateJson.hour+'时'));
329 | thisDateJson.lunarStr += ' '+ (thisDateJson.hour<0?'时辰未知': (this._getLunarName('hour',thisDateJson.hour)+'时'));
330 | }
331 | //判断当前模式返回thisStr
332 | if(this.data.lunarTab === true){
333 | thisDateJson.thisStr = thisDateJson.lunarStr;
334 | }else{
335 | thisDateJson.thisStr = thisDateJson.solarStr;
336 | }
337 | this.setData({
338 | returnDate: thisDateJson
339 | })
340 | },
341 | // 返回中文农历名
342 | _getLunarName(type, number) {
343 | const monthArr=['正月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','腊月'];
344 | const dayArr=['初一','初二','初三','初四','初五','初六','初七','初八','初九','初十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','廿一','廿二','廿三','廿四','廿五','廿六','廿七','廿八','廿九','三十','三十一'];
345 | const hourArr=['0子','1丑','2丑','3寅','4寅','5卯','6卯','7辰','8辰','9巳','10巳','11午','12午','13未','14未','15申','16申','17酉','18酉','19戌','20戌','21亥','22亥','23子'];
346 | if (type === 'month') return monthArr[number - 1];
347 | if (type === 'day') return dayArr[number - 1];
348 | if (type === 'hour') return hourArr[number];
349 | },
350 | // 填充农历数据
351 | _initlunar(date, hour) {
352 | const dateArr = date.split("-");
353 | // 转换公历to农历
354 | const lunarData = solarLunar.solar2lunar(dateArr[0], dateArr[1], dateArr[2]);
355 | // 该年是否有闰月,0没有
356 | const leapMonth = solarLunar.leapMonth(lunarData.lYear);
357 | // 月份数组
358 | let monthArr = [];
359 | for (let i = 1; i <= 12; i++) {
360 | monthArr.push(this._getLunarName('month',i));
361 | // 判断是否有闰月
362 | if(leapMonth > 0 && i == leapMonth){
363 | monthArr.push('闰'+this._getLunarName('month',i));
364 | }
365 | }
366 | // 日期数组
367 | let dayArr = [];
368 | let maxDay;
369 | // 该日期是否是闰月
370 | if(lunarData.isLeap){
371 | maxDay = solarLunar.leapDays(dateArr[0], dateArr[1])
372 | }else{
373 | maxDay = solarLunar.monthDays(dateArr[0], dateArr[1])
374 | }
375 | for (let i = 1; i <= maxDay; i++) {
376 | dayArr.push(this._getLunarName('day',i));
377 | }
378 |
379 | // 时辰数组
380 | let hourArr = ['未知'];
381 | for (let i = 0; i <= 23; i++) {
382 | hourArr.push(this._getLunarName('hour', i)+'时');
383 | }
384 | // 设置位置
385 | let selectArr = [
386 | lunarData.lYear-1940,
387 | (leapMonth > 0 && leapMonth <= lunarData.lMonth) ? lunarData.lMonth : lunarData.lMonth-1,
388 | lunarData.lDay-1,
389 | parseInt(hour)+1
390 | ];
391 | this.setData({
392 | lunarTab: true,
393 | monthArr: monthArr,
394 | dayArr: dayArr,
395 | hourArr: hourArr,
396 | selectArr: selectArr
397 | })
398 | },
399 | // 填充公历数据
400 | _initsolar(date, hour) {
401 | const dateArr = date.split("-");
402 | // 月份数组
403 | let monthArr = [];
404 | for (let i = 1; i <= 12; i++) {
405 | monthArr.push(i);
406 | }
407 |
408 | // 日期数组
409 | let dayArr = [];
410 | let maxDay = solarLunar.solarDays(dateArr[0], dateArr[1])
411 | for (let i = 1; i <= maxDay; i++) {
412 | dayArr.push(i);
413 | }
414 |
415 | // 时辰数组
416 | let hourArr = ['未知'];
417 | for (let i = 0; i <= 23; i++) {
418 | hourArr.push(i+'时');
419 | }
420 |
421 | // 设置位置
422 | let selectArr = [dateArr[0]-1940, dateArr[1]-1, dateArr[2]-1, parseInt(hour)+1];
423 | this.setData({
424 | lunarTab: false,
425 | monthArr: monthArr,
426 | dayArr: dayArr,
427 | hourArr: hourArr,
428 | selectArr: selectArr
429 | })
430 | },
431 | // 阻塞事件冒泡,底层滑动
432 | handleStop() {
433 | return false;
434 | }
435 | }
436 | })
--------------------------------------------------------------------------------