小米日历一个小实现
相信大家在开发app(原生、h5、混编)的时候,总会遇到一些自带的控件没办法直接使用,就拿我前些天工作上遇到的一个需求,我需要做一个类似于企业微信考勤打开的日历,上面可以统计员工每个的考勤情况,那么直接拿原生的控件肯定无法实现这个需求的(至少原生android、h5的一些ui框架没有找到现成的),那么这个实现我们就需要自己手动去实现。
那么如何去实现一个日历呢?在这里我就以小米日历为例子将下核心思路和算法
第一步:我们需要算出xxxx年xx月有多少天,这个很简单我就不贴代码了。
第二步:我们需要算出xx月的第一天是星期几,那么我们就要使用“蔡勒公式”去实现,具体公式讲解在这个链接里面: https://zh.wikipedia.org/wiki/%E8%94%A1%E5%8B%92%E5%85%AC%E5%BC%8F [这是维基百科,需要搭个梯子]
第三步:我们需要知道,xx月的上一个月有多少天,我们来看下,下图中的小米日历:
小米日历截图
我们一眼可以看到在数字的上面分别是:日、一、二、三、四、五、六。2019年12月1日是 “一”、而2020年1月1日是“三”,那么:日、一、二就是上个月的多少号了。接下来我们就可以通过这个通项公式把上个月对应的号数算出来。
1、2020.1.1是星期三,这一天和星期日相差3天,这个我们在第二大步实现的时候可以一并算出来
2、用算出来的差做为一个单循环
3、用:ds+(j+(-n)) 算出结果,其中:ds表示上个月的天数、j是n的循环变量、n是第一小步求出来的差
最后我们以2020.1.1号做验证,ds=31, j=1&&j<=3,n=3
j=1 31+(1+(-3))=29
j=2 31+(2+(-3))=30
j=3 31+(3+(-3))=31
总结:貌似没啥好总结的,实现都比较简单,希望对大家有所帮助,努力做一名合格的程序员吧,共勉。