日历签到小程序的实现(如何制作签到小程序)

网友投稿 628 2022-09-30 16:21:43

日历签到小程序的实现(如何制作签到小程序)

程序员必备接口测试调试工具:立即使用Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具 后端、前端、测试,同时在线协作,内容实时同步

首先我们来看一下最终的效果图:

(学习视频分享:编程入门)

下面我们来介绍实现思路:

首先,我们要获取的无非就是每一个格子里面的数据。

那么,怎么获取月的数据呢,可以看到月第一天都是1开始,然后xx天,比如1月31天,我们把它枚举出来。

但是月份受到年份影响,所以计算是否闰年就完成了。

上代码获取这个月的7*5列表

let getMothList = (year, month) => { var star = new Date(Date.UTC(year, month - 1, 1)).getDay() let mn = getMothNum(year)[month - 1] var res = [] var row = [] new Array(35) .fill('') .map((_, i) => i - star + 1) .map(e => (e > 0 && e <= mn) ? ({ date: `${year}/${month}/${e}`, number: e }) : (null) ) .forEach((item, i) => { row.push(JSON.parse(JSON.stringify(item))) if((i + 1) % 7 == 0){ res.push(row) row = [] } }) return res}登录后复制

然后获取月

var getMaxY = y => Boolean( y % 4 ==0 && y % 100 != 0 || y % 400==0)var getAugNum = n => getMaxY(n) ? 29 : 28// --获取年对应的月份var getMothNum = y => ([ 31, getAugNum(y), 31, 30, 31, 30, 31,31, 30, 31, 30, 31 ])登录后复制

我上面js就这些了(还差上下月切换的没说哈)

但是少了中文的月份,有需要的这个可以再匹配

var mothZh = ['一','二','三','四','五','六','七','八','九','十','十一','十二'].map(e => e + '月')登录后复制

然后就是上下月月份了

up(e){ var data = e.currentTarget.dataset if(data.data == '上'){ if(this.data.dateM > 1){ var dateM = this.data.dateM var dateY = this.data.dateY this.setDate(dateY, dateM - 1) }else{ var dateY = this.data.dateY this.setDate(dateY - 1, 12) } } }, down(e){ var data = e.currentTarget.dataset if(data.data == '下'){ if(this.data.dateM < 12){ var dateM = this.data.dateM var dateY = this.data.dateY this.setDate(dateY, dateM + 1) }else{ var dateY = this.data.dateY this.setDate(dateY + 1, 1) } } },登录后复制

上下月操作好了就是更新数据了,更新数据的时候,因为小程序不能在view里面写逻辑,所以我们在mpa里面操作(这是我的业务逻辑,你们不用管他,我之所以放出来是方便大家查看)

setDate(dateY, dateM){ var date_list = getMothList(dateY, dateM) .map(e => !e ? e : e.map(day => { var cat_date = this.data.cat_date return !day ? day : { ...day, className: this.data.chckin_list.indexOf(day.date) != -1 ? 'checkin' : '', sign: day.date == [cat_date.y, cat_date.m, cat_date.d].join('/'), maxToday: +(Date.UTC(day.date.split('/')[0], day.date.split('/')[1] - 1, +(day.date.split('/')[2]))) > Date.UTC(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()), } })) this.setData(({ dateY, dateM, date_list, })) // 获取月和修改的时候,获取签到列表 this.setSign(dateY, dateM) // console.log(date_list) },登录后复制

然后会注意到,这里有一个chckin_list,这个就是要渲染出来的啦。 view

今 {{day.number}} 已签 登录后复制

其他

之所以没放css,大家css还是自己写吧,如果真有需要,在下面评论。

(如果有需要,我可以说下签到后台是怎么做的,nodejs)

--好了--

就这样了,晚安

--- 更新部分---

(楼下有人提醒(毛毛饭),3月最后一个31号的不见了,我检查了下,发现被剪切了,因为5 * 7并不能完整展示出来)

修复后的图

改动部分就是,动态加载行。

基于上面的代码,添加一个判断

先在前面的35改成6*7。因为多加了一行。 然后再判断是否有空余位置,去掉即可。

row.map(e => e || '').join('') !== ''登录后复制

--完--

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RuntimeError: NCCL error in:/torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1248, unhandled syst
下一篇:【问题解决】9.9元包邮的不带USB转串口的esp32c3开发板下载成功
相关文章