├── 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 | 4 | 公农历日期选择器 5 | @author:羯瑞 6 | 7 |
8 | 9 | 带时辰 10 | 11 | 12 | 13 | 不带时辰 14 | 15 | 16 | 17 | 带时辰(不需要确认) 18 | 19 | 20 |
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 | ![gif](https://cdn.chenrf.com/abc.gif) 9 | 10 | ### 小程序二维码 11 | 12 | ![前端读者](http://cdn.chenrf.com/2018723213248.png) 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 | 24 | 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 | }) --------------------------------------------------------------------------------