日歷簽到小程序怎么弄-創(chuàng)新互聯(lián)

小編給大家分享一下日歷簽到小程序怎么弄,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),濱海新區(qū)企業(yè)網(wǎng)站建設(shè),濱海新區(qū)品牌網(wǎng)站建設(shè),網(wǎng)站定制,濱海新區(qū)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,濱海新區(qū)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶(hù)成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

首先我們來(lái)看一下最終的效果圖:

日歷簽到小程序怎么弄

下面我們來(lái)介紹實(shí)現(xiàn)思路:

首先,我們要獲取的無(wú)非就是每一個(gè)格子里面的數(shù)據(jù)。

先獲取月,然后點(diǎn)擊月切換到另一個(gè)月,到了邊界線的時(shí)候到了上/下年即可。

那么,怎么獲取月的數(shù)據(jù)呢,可以看到月第一天都是1開(kāi)始,然后xx天,比如1月31天,我們把它枚舉出來(lái)。

但是月份受到年份影響,所以計(jì)算是否閏年就完成了。

上代碼
獲取這個(gè)月的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
// --獲取年對(duì)應(yīng)的月份
var getMothNum = y => ([ 31, getAugNum(y), 31, 30,  31, 30, 31,31, 30, 31, 30, 31 ])

我上面js就這些了(還差上下月切換的沒(méi)說(shuō)哈)

但是少了中文的月份,有需要的這個(gè)可以再匹配

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)
      }
    }
  },

上下月操作好了就是更新數(shù)據(jù)了,更新數(shù)據(jù)的時(shí)候,因?yàn)樾〕绦虿荒茉趘iew里面寫(xiě)邏輯,所以我們?cè)趍pa里面操作(這是我的業(yè)務(wù)邏輯,你們不用管他,我之所以放出來(lái)是方便大家查看)

  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,
    }))
    // 獲取月和修改的時(shí)候,獲取簽到列表
    this.setSign(dateY, dateM)
    // console.log(date_list)
  },

然后會(huì)注意到,這里有一個(gè)chckin_list,這個(gè)就是要渲染出來(lái)的啦。 view

<view class="week">
            <view class="flex" wx:for="{{date_list}}" wx:key="index" wx:for-item="row">
                <view 
                class="day {{day.maxToday ? 'maxToday' : ''}}" 
                wx:for="{{row}}" wx:for-index="row_idx" wx:for-item="day" wx:key="row_idx"
                bind:tap="tapDay"
                data-day="{{day.date}}"
                >
                    <block wx:if="{{day}}">
                        <text class="block to_day_block  {{day.sign ? 'select_date' : ''}}" wx:if="{{toDay == day.date}}">今</text>
                        <text class="block  {{day.sign ? 'select_date' : ''}}" wx:else>{{day.number}}</text>
                    </block>
                    <view wx:if="{{day.className}}" class="{{day.className}}">已簽</view>
                </view>
            </view>
        </view>

上面是我的業(yè)務(wù)邏輯,其實(shí)只需要if,day就行了,因?yàn)槌丝盏?,其他都需要渲染。但是一般業(yè)務(wù)也有是否簽到啊,今天以后的灰色不可點(diǎn)擊?。ㄟ@里沒(méi)有不可點(diǎn)擊是因?yàn)橛胏ss禁用點(diǎn)擊)

其他

之所以沒(méi)放css,大家css還是自己寫(xiě)吧,如果真有需要,在下面評(píng)論。

哦, 如果要看效果,去小程序里面搜索《初九背單詞》,點(diǎn)擊日歷(一個(gè)是首頁(yè)完成今日任務(wù),一個(gè)是我的->背單詞天數(shù))

(如果有需要,我可以說(shuō)下簽到后臺(tái)是怎么做的,nodejs)

--好了--

就這樣了,晚安

--- 更新部分---

(樓下有人提醒(毛毛飯),3月最后一個(gè)31號(hào)的不見(jiàn)了,我檢查了下,發(fā)現(xiàn)被剪切了,因?yàn)? * 7并不能完整展示出來(lái))

修復(fù)后的圖

日歷簽到小程序怎么弄

改動(dòng)部分就是,動(dòng)態(tài)加載行。

基于上面的代碼,添加一個(gè)判斷

日歷簽到小程序怎么弄

先在前面的35改成6*7。因?yàn)槎嗉恿艘恍小?然后再判斷是否有空余位置,去掉即可。

 row.map(e => e || '').join('') !== ''

看完了這篇文章,相信你對(duì)“日歷簽到小程序怎么弄”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

新聞名稱(chēng):日歷簽到小程序怎么弄-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article10/dchcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站改版、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)