• 小程序日历


    示例图

    wxml文件

    <!--pages/template/calendar/index.wxml-->
    <nav-bar navbar-data='{{navbarData}}'></nav-bar>
    <view style='padding-top: {{height}}px;padding-bottom: 48px;'>
      <view class="calendar-wrap">
        <view class="date">
          <image class="direction" src="{{imgPath}}public/next@2x.png" style="transform: rotate(180deg)" bindtap='handleCalendar' data-handle="prev"/>
          <label>{{year}}年{{month}}月</label>
          <image class="direction" src="{{imgPath}}public/next@2x.png" bindtap='handleCalendar' data-handle="next" />
        </view>
        <view class="content">
          <view class="header">
            <block wx:for="{{weeks}}" wx:key="index">
              <text class="weeks-item-text">{{item}}</text>
            </block>
          </view>
          <view class="body-days">
            <block wx:for="{{days}}" wx:key="index">
              <view class="days-item {{item.current ? '' : 'no-current'}}" >
                <view class="days-item-text" wx:if="{{item.date}}">{{item.date}}</view>
              </view>
            </block>
          </view>
        </view>
      </view>
    </view>

    wxss文件

    /* pages/template/calendar/index.wxss */
    .calendar-wrap {
      width: 690rpx;
      margin: 30rpx auto 0;
      background: #FFFFFF;
      box-shadow: 0 0 16rpx 0 rgba(0,0,0,0.08);
      border-radius: 16rpx;
    }
    .date {
      display: flex;
      flex-direction: row;
      justify-content: center;
      align-items: center;
      line-height: 92.4rpx;
      margin: 0 41rpx;
      border-bottom: 2rpx solid #F5F6F6;
      font-family: 'PingFangSC-Medium';
      font-size: 44rpx;
      color: #434C53;
    }
    
    .direction {
      width: 40rpx;
      margin: 10rpx;
      height: 40rpx;
    }
    
    .content {
      padding: 20rpx 20rpx 0;
    }
    
    .header {
      display: flex;
      flex-direction: row;
      margin-bottom: 20rpx;
    }
    
    .weeks-item-text {
      width: 80rpx;
      line-height: 48rpx;
      font-size: 30rpx;
      text-align: center;
    }
    
    .header .weeks-item-text:not(:nth-child(7n)) {
      margin-right: 15rpx;
    }
    
    .body-days {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      text-align: center;
      padding-bottom: 10rpx;
    }
    
    .days-item {
      width: 80rpx;
      height: 48rpx;
      display: flex;
      justify-content: center;
      align-content: center;
      margin-bottom: 15rpx;
      color: #434C53;
    }
    
    .days-item.no-current {
      color: #DCDCDC;
    }
    
    .days-item:not(:nth-child(7n)) {
      margin-right: 15rpx;
    }
    
    .days-item-text {
      font-size: 30rpx;
      text-align: center;
    }

    js文件

    // pages/template/calendar/index.js
    const util = wx.base.util
    const app = getApp()
    Page({
        data: {
            // 组件所需的参数
            navbarData: {
                showCapsule: 0, //是否显示左上角图标 1 表示显示 0 表示不显示
                showHome: 0, // 是否显示左上角的home键 1 显示 0 不显示
                title: '', //导航栏 中间的标题
            },
            // 此页面 页面内容距最顶部的距离
            height: app.globalData.height * 2 + 20,
            imgPath: app.globalData.imgPath,
            date: [],
            weeks: ['日', '一', '二', '三', '四', '五', '六'],
            days: [],
            year: 0,
            month: 0
        },
        onLoad: function (options) {
            this.dateData()
        },
        onShow: function () {
            if (typeof this.getTabBar === 'function' && this.getTabBar()) {
                this.getTabBar().setData({
                    selected: 1 //这个数是,tabBar从左到右的下标,从0开始
                })
            }
            this.data.navbarData.title = wx.getStorageSync('account-corpNameShort') || '福利'
            this.setData({
                navbarData: this.data.navbarData
            })
        },
        dateData: function () {
            var date = new Date()
            var year = date.getFullYear()
            var month = date.getMonth() + 1
            this.updateDays(year, month)
    
        },
        handleCalendar: function (e) {
            const handle = e.currentTarget.dataset.handle;
            const year = this.data.year;
            const month = this.data.month;
            if (handle === 'prev') {
                let newMonth = month - 1;
                let newYear = year;
                if (newMonth < 1) {
                    newYear = year - 1;
                    newMonth = 12;
                }
                this.updateDays(newYear, newMonth);
                this.setData({
                    year: newYear,
                    month: newMonth
                })
            } else {
                let newMonth = month + 1;
                let newYear = year;
                if (newMonth > 12) {
                    newYear = year + 1;
                    newMonth = 1;
                }
                this.updateDays(newYear, newMonth);
                this.setData({
                    year: newYear,
                    month: newMonth
                })
            }
        },
        updateDays: function (year, month) {
            var days = []
            var dateDay, dateWeek, lastWeek
            dateDay = this.getThisMonthDays(year, month)
            dateWeek = this.getFirstDayOfWeek(year, month)
            lastWeek = this.getLastDayOfWeek(year, month)
            //向数组中添加天
            for (let index = 1; index <= dateDay; index++) {
                days.push({
                    date: index,
                    isSign: false,
                    current: true // 是不是当月的日期
                })
            }
            // 获取本月第一天的上一天是几号
            let time = new Date(year + '-' + month+ '-' + 1).getTime() - 24 * 60 * 60 * 1000;
            let yesterday = new Date(time).getDate()
            //向数组中添加,一号之前应该空出的空格
            for (let index = 1; index <= dateWeek; index++) {
                days.unshift({
                    date: yesterday--,
                    isSign: false,
                    current: false
                })
            }
            //向数组中添加,最后一天之后应该空出的空格
            for (let index = 1; index <= 6 - lastWeek; index++) {
                days.push({
                    date: index,
                    isSign: false,
                    current: false
                })
            }
            this.setData({
                days: days,
                year: year,
                month: month
            })
        },
        // 获取当月共多少天
        getThisMonthDays: function (year, month) {
            return new Date(year, month, 0).getDate()
        },
        // 获取当月第一天星期几
        getFirstDayOfWeek: function (year, month) {
            console.log(year, month)
            let _time = new Date(year + '-' + (month + 1)+ '-' + 1).getTime() - 24 * 60 * 60 * 1000;
            let lastDay = new Date(_time).getDate()
            console.log(lastDay)
            console.log(new Date(Date.UTC(year, month - 1, 29)).getDay())
            return new Date(Date.UTC(year, month - 1, 1)).getDay()
        },
        // 获取当月第一天星期几
        getLastDayOfWeek: function (year, month) {
            let _time = new Date(year + '-' + (month + 1)+ '-' + 1).getTime() - 24 * 60 * 60 * 1000;
            let lastDay = new Date(_time).getDate()
            return new Date(Date.UTC(year, month - 1, lastDay)).getDay()
        }
    })
  • 相关阅读:
    设计模式-Note9-行为变化类
    设计模式-Note8-数据结构类
    设计模式-Note7-状态变化类
    设计模式-Note6-接口隔离类
    设计模式--Note5--对象性能类
    设计模式--Note4--对象创建类
    设计模式--Note3--单一职责类
    设计模式--Note2--组件协作类
    V$ACCESS 查询结果慢的解决方法
    openstack numa详解(命令使用篇)
  • 原文地址:https://www.cnblogs.com/memphis-f/p/11063893.html
Copyright © 2020-2023  润新知