微信小程序实现日历功能、日历转换插件、calendar

这篇具有很好参考价值的文章主要介绍了微信小程序实现日历功能、日历转换插件、calendar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


演示

效果图

微信小程序实现日历功能、日历转换插件、calendar,web前端,微信小程序,JavaScript,微信小程序,小程序,web,前端,javascript


微信小程序实现交互

微信小程序实现日历功能、日历转换插件、calendar,web前端,微信小程序,JavaScript,微信小程序,小程序,web,前端,javascript文章来源地址https://www.toymoban.com/news/detail-643511.html


html

<view wx:if="{{calendarArr.length}}">
  <view class="height_786 df_fdc_aic">
    <view class="grid_c7_104">
      <view class="font_weight_800 text_align_center {{index===0||index===week.length-1?'color_777':'color_333'}}" wx:for="{{week}}" wx:key="id">{{item.title}}</view>
    </view>

    <view class="grid_c7_104 margin_t_26 grid_row_gap_16">
      <view class="height_104 dis_c_cc radius_6 text_align_center {{item.date===date&&!item.$b?'back_primary color_EEE':''}} {{item.date===newDate?'font_weight_800 font_style_oblique color_FF780A':''}} {{item.$isWeekend}}" wx:for="{{calendarArr}}" wx:key="id" data-item="{{item}}" catchtap="selectCalendar">
        <view>{{item.cDay}}</view>
        <view class="font_size_22 {{item.$festival}}">{{item.$SF}}</view>
      </view>
    </view>
  </view>

  <view class="margin_t_26 dis_r_c">
    <view class="width_95 dis_r_sa padding_tb_8 text_align_center shadow_0_0_6_6_CCC radius_8">
      <view wx:for="{{info.list}}" wx:key="id">
        <view>{{item.cTitle}}</view>
        <view>{{item.lTitle}}</view>
      </view>
    </view>
  </view>

  <view class="margin_t_26">
    <picker-view class="height_300" indicator-class="height_90" value="{{pickerVal}}" bindchange="bindChange">
      <picker-view-column>
        <view class="height_90 text_align_center dis_r_c" wx:for="{{years}}" wx:key="index">
          <text>{{item.title}}</text>
        </view>
      </picker-view-column>
      <picker-view-column>
        <view class="height_90 text_align_center dis_r_c" wx:for="{{months}}" wx:key="index">
          <text>{{item.title}}</text>
        </view>
      </picker-view-column>
    </picker-view>
  </view>
</view>

JavaScript

// 注意这里引入的方式
// 因为不想构建小程序
// 所以直接把下载好的日历转换文件夹放到小程序中引用即可
import calendar from '../../../utils/js-calendar-converter/src/index';

Page({
  /**
   * 页面的初始数据
   */
  data: {
    y: undefined,
    m: undefined,
    d: undefined,
    date: '',
    calendarArr: [],
    week: [{
        id: 'id0',
        title: '日',
        value: 0
      },
      {
        id: 'id1',
        title: '一',
        value: 1
      },
      {
        id: 'id2',
        title: '二',
        value: 2
      },
      {
        id: 'id3',
        title: '三',
        value: 3
      },
      {
        id: 'id4',
        title: '四',
        value: 4
      },
      {
        id: 'id5',
        title: '五',
        value: 5
      },
      {
        id: 'id6',
        title: '六',
        value: 6
      }
    ],
    info: {},
    years: [],
    months: [],
    pickerVal: [0, 0],
    newDate: ''
  },

  /**
   * 选择年份与月份
   * @param {object} obj
   * @return {undefined} undefined
   */
  bindChange({
    detail: {
      value
    }
  }) {
    let self = this,
      selfData = self.data,
      years = selfData.years,
      months = selfData.months,
      y = selfData.y,
      m = selfData.m,
      d = selfData.d,
      year = years[value[0]].value,
      month = months[value[1]].value,
      newDate = '';

	// 当滑动到不是当年当月的时候默认选中当月1号
    newDate = year !== y || month !== m ? `${year}-${month}-1` : `${year}-${month}-${d}`;

    self.setData({
      newDate,
      pickerVal: value
    }, () => self.createCalendar(year, month));
  },

  /**
   * 显示的信息
   * @param {object} obj
   * @return {Array} info
   */
  handleInfo(obj) {
    let list = [{
        id: 'id1',
        cTitle: obj.cYear + '年',
        lTitle: obj.gzYear + obj.Animal + '年'
      },
      {
        id: 'id2',
        cTitle: obj.cMonth + '月',
        lTitle: obj.gzMonth + obj.IMonthCn
      },
      {
        id: 'id3',
        cTitle: obj.cDay + '日',
        lTitle: obj.gzDay + obj.IDayCn
      },
      {
        id: 'id4',
        cTitle: obj.ncWeek,
        lTitle: obj.astro
      }
    ];

    obj.list = list;

    this.setData({
      info: obj
    });
  },

  /**
   * 创建日期
   * @param y 年
   * @return undefined
   */
  selectCalendar({
    currentTarget: {
      dataset: {
        item
      }
    }
  }) {
    this.handleInfo(item);
    this.setData({
      newDate: item.date
    });
  },

  /**
   * 创建日期
   * @param y 年
   * @param m 月
   * @param d 日
   * @return [{}]
   */
  creationDate(y, m, d) {
    let arr = [];

    for (let i = 1; i < d + 1; i++) {
      let obj = calendar.solar2lunar(y, m, i);

      arr.push({
        ...obj
      });
    }

    return arr;
  },

  /**
   * 收集创建日期需要的数据(重要函数)
   * @param {Number} y 年
   * @param {number} m 月
   * @return [{}]
   */
  createCalendar(y, m) {
    let self = this,
      selfData = self.data,
      newDate = selfData.newDate,
      y1 = y,
      y2 = y,
      y3 = y,
      m1 = m - 1,
      m2 = m,
      m3 = m + 1,
      d1 = undefined,
      d2 = undefined,
      d3 = undefined,
      arr1 = [],
      arr2 = [],
      arr3 = [],
      len2 = 0,
      nWeek1 = undefined,
      nWeek3 = undefined,
      info = {};

    if (m === 1)(y1 = y - 1, m1 = 12);
    if (m === 12)(y3 = y + 1, m3 = 1);

    d1 = calendar.solarDays(y, m1);
    d2 = calendar.solarDays(y, m2);
    d3 = calendar.solarDays(y, m3);

    arr1 = self.creationDate(y1, m1, d1);
    arr2 = self.creationDate(y2, m2, d2);
    arr3 = self.creationDate(y3, m3, d3);
    len2 = arr2.length;
    nWeek1 = arr2[0].nWeek;
    nWeek3 = arr2[len2 - 1].nWeek;

    nWeek1 = nWeek1 === 7 ? 0 : arr2[0].nWeek;
    nWeek3 = nWeek3 === 6 ? 0 : nWeek3 === 7 ? nWeek3 - 1 : 6 - nWeek3;

    // 前部分补全一个星期
    for (let i = arr1.length - 1; nWeek1 > 0; i--) {
      let item = arr1[i];

      item.$b = true;
      arr2.unshift(item);
      nWeek1--;
    }

    // 后部分补全一个星期
    for (let i = 0; i < nWeek3; i++) {
      let item = arr3[i];

      item.$b = true;
      arr2.push(item);
    }

    arr2 = arr2.map((item, i) => {
      if (item.IDayCn === '初一' && !item.festival && !item.Term && !item.lunarFestival) {
        item.$festival = '';
        item.$SF = item.IMonthCn;
      } else if (item.festival) {
        item.$festival = 'color_primary';
        item.$SF = item.festival;
      } else if (item.Term) {
        item.$festival = 'color_primary';
        item.$SF = item.Term;
      } else if (item.lunarFestival) {
        item.$festival = 'color_primary';
        item.$SF = item.lunarFestival;
      } else {
        item.$festival = '';
        item.$SF = item.IDayCn;
      }

      if (['星期六', '星期日'].includes(item.ncWeek) && item.cMonth === m) {
        item.$isWeekend = 'color_777';
      } else if (item.$b) {
        item.$isWeekend = 'color_CCC';
      } else {
        item.$isWeekend = 'color_333';
      }
      item.$id = `id${i+1}`;

      if (item.date === newDate) info = item;

      return item;
    });

    self.handleInfo(info);

    self.setData({
      calendarArr: arr2
    });
  },

  /**
   * 初始化
   */
  init() {
    let self = this,
      y = undefined,
      m = undefined,
      d = undefined,
      years = [],
      months = [],
      pickerVal = [],
      date = new Date();

    y = date.getFullYear();
    m = date.getMonth() + 1;
    d = date.getDate();

	// 获取100年时间的日历
    for (let i = y - 95; i <= y + 5; i++) years.push({
      id: `id${i}`,
      title: i + '年',
      value: i
    });

    for (let i = 0; i < 12; i++) months.push({
      id: `id${i}`,
      title: i + 1 + '月',
      value: i + 1
    });

    pickerVal = [
      years.findIndex(item => item.value === y),
      months.findIndex(item => item.value === m)
    ];

    self.setData({
        y,
        m,
        d,
        date: `${y}-${m}-${d}`,
        newDate: `${y}-${m}-${d}`,
        years,
        months
      },
      () => (self.createCalendar(y, m), self.setData({
        pickerVal
      })));
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.init();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

到了这里,关于微信小程序实现日历功能、日历转换插件、calendar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序签到页面的日历实现

    业务需求:签到页面用日历展示签到情况,只显示当月的。 过期未签的显示灰色字,已签的显示橙色字,当天显示白色字加一个背景图。  1、新建日历组件(取名:calendar)  2、calendar.wxml代码 3、calendar.wxss 4、calendar.js(组件只需要传入当前月签到的日期列表  2023-3-1格式,格

    2024年02月10日
    浏览(47)
  • 微信小程序向系统日历添加事件(提醒)实现

    直接上代码 使用 wx.addPhoneCalendar 需要满足以下前置条件: 微信版本支持:wx.addPhoneCalendar 是微信小程序的 API,只有在微信版本号大于等于 6.6.6 的环境下才能使用。 用户授权:在用户手机的日历中添加日程需要获取用户授权,用户需要在小程序中点击授权按钮才能进行操作。

    2024年02月12日
    浏览(88)
  • python自定义日历库,与对应calendar库函数功能基本一致

    目录 自定义日历库 常用列表 日期列表 常用函数 闰年判断 月份天数 元旦序号 日历表头 星期序号 序号及天数 月历字串 打印月历 年历字串 打印年历 对比测试 测试结果 完整代码 运行结果 自定义日历库函数,并使得其与python calendar库中对应的函数功能基本一致。 month_name

    2024年03月20日
    浏览(53)
  • Vue中的日历组件 Calendar 实现 考勤打卡记录

    实现效果图 1.由于Calendar没有右上角月份切换的API事件,可以给组件源码添加自定义添加一个事件 2.也可以通过自带的input事件来获取日历 3.vue页面完整代码 注释:this.$m(this.beginTime).format(‘YYYY-MM-DD HH:mm’),是分装的标准时间转化年月日,使用者可通过多种方法自定义处理。

    2024年01月22日
    浏览(59)
  • uniapp----微信小程序 日历组件(周日历&& 月日历)【Vue3+ts+uView】

    用Vue3+ts+uView来编写日历组件; 存在周日历和月日历两种显示方式; 高亮显示当天日期,红点渲染有数据的日期,点击显示数据 1. calendar-week-mouth组件代码 2. 在页面引用组件

    2024年02月04日
    浏览(73)
  • uniapp - 微信小程序利用腾讯地图插件实现搜索地点/位置功能,uniapp小程序平台端使用腾讯地图做搜索城市位置+底部自动根据关键字联想其他相关位置(详细示例源码,一键复制开箱即用!)

    在uniapp微信小程序开发中,安装使用腾讯地图插件,并利用腾讯地图功能完成目的地、城市位置、名称等搜索功能,并且在下拉框中自动 “联想” 相关的地点位置。 最终效果图有点模糊,你可以按照教程一路复制就可以搞定了。

    2024年02月03日
    浏览(113)
  • 【Flutter】Flutter 使用 table_calendar 实现自定义日历

    【Flutter】Flutter 使用 table_calendar 实现自定义日历 你好!今天我要为你介绍一个非常实用的 Flutter 日历组件—— table_calendar 。这个组件不仅功能强大、高度可定制,而且使用起来非常简单。在本文中,我会手把手教你如何使用这个组件,并分享一些实际业务中的应用示例。希

    2024年02月08日
    浏览(46)
  • 【微信小程序支付功能】uniapp实现微信小程序支付功能

    场景 :要实现公司微信小程序的电商模块微信支付功能 一.实现步骤和思路 在登录状态,登录的时候获取到code,利用code获取到 openid: https://blog.csdn.net/weixin_45308405/article/details/128868377?spm=1001.2014.3001.5501 在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“微信支付

    2024年02月11日
    浏览(61)
  • 微信小程序日历组件(可滑动,可展开收缩,可标点)

    效果图 组件介绍 原生小程序编写,简单轻便,拿来即用。 推荐从代码托管地址获取代码,后续会更新功能: github地址 | gitee地址 代码部分(这里可能不是最新的,推荐去gitee克隆代码) calendar.wxml calendar.js calendar.json calendar.wxss

    2024年02月11日
    浏览(49)
  • 小程序自定义日历实现签到功能

    使用uniapp自带的uni-calendar可以实现简单的数据展示以及打卡 但是项目要求的日历日期由后端返回每个月的返回而不是整年的返回, 签到的方式也是点击按钮签到而不是点击日历表 这样uniapp的组件就不能实现我们的项目要求了 效果图:   实现方法如下: html css js

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包