当前位置: 首页 > news >正文

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

文章目录

  • 演示
  • html
  • JavaScript


演示

效果图

calendar


微信小程序实现交互

X2_2_2_25


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

文章目录 演示htmlJavaScript 演示 效果图 微信小程序实现交互 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…...

【浩鲸科技】济南Java后端面经

本文目录 写在前面试题总览题目解析1.说一下SpringBoot中常用的注解2.Redis中的基本数据类型3.TCP的网络协议4.java中常见的锁5.Hashmap的底层数据结构、底层源码、扩容机制源码6.java面向对象的特点 写在前面 关于这个专栏&#xff1a; 本专栏记录一些互联网大厂、小厂的面试实…...

VMware搭建Hadoop集群 for Windows(完整详细,实测可用)

目录 一、VMware 虚拟机安装 &#xff08;1&#xff09;虚拟机创建及配置 &#xff08;2&#xff09;创建工作文件夹 二、克隆虚拟机 三、配置虚拟机的网络 &#xff08;1&#xff09;虚拟网络配置 &#xff08;2&#xff09;配置虚拟机 主机名 &#xff08;3&#xf…...

【Rust 基础篇】Rust关联类型:灵活的泛型抽象

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。为了实现这一目标&#xff0c;Rust引入了"所有权系统"、"借用检查器"等特性&#xff0c;有效地避免了常见…...

学习笔记21 list

一、概述 有两种不同的方法来实现List接口。ArrayList类使用基于连续内存分配的实现&#xff0c;而LinkedList实现基于linked allocation。 list接口提供了一些方法&#xff1a; 二、The ArrayList and LinkedList Classes 1.构造方法 这两个类有相似的构造方法&#xff1a…...

微信小程序弱网监控

前言 在真实的项目中&#xff0c;我们为了良好的用户体验&#xff0c;会根据用户当前的网络状态提供最优的资源&#xff0c;例如图片或视频等比较大的资源&#xff0c;当网络较差时&#xff0c;可以提供分辨率更低的资源&#xff0c;能够让用户尽可能快的看到有效信息&#xf…...

【Linux】进程通信 — 共享内存

文章目录 &#x1f4d6; 前言1. 共享内存2. 创建共享内存2.1 ftok()创建key值&#xff1a;2.2 shmget()创建共享内存&#xff1a;2.3 ipcs指令&#xff1a;2.4 shmctl()接口&#xff1a;2.5 shmat()/shmdt()接口:2.6 共享内存没有访问控制&#xff1a;2.7 通过管道对共享内存进…...

“从零开始学习Spring Boot:快速搭建Java后端开发环境“

标题&#xff1a;从零开始学习Spring Boot&#xff1a;快速搭建Java后端开发环境 摘要&#xff1a;本文将介绍如何从零开始学习Spring Boot&#xff0c;并详细讲解如何快速搭建Java后端开发环境。通过本文的指导&#xff0c;您将能够快速搭建一个基于Spring Boot的Java后端开发…...

行为型-状态模式(State Pattern)

概述 状态模式是一种行为设计模式&#xff0c;它可以让对象在内部状态改变时改变它的行为。简而言之&#xff0c;状态模式允许对象在不同状态下更改其行为&#xff0c;而不需要通过使用大量的条件语句进行手动更改。 优点&#xff1a; 状态模式将与特定状态相关的行为分散到…...

大厂领导为什么喜欢跨层与下属聊天

作为一个在大厂里面浸淫十几年的loser&#xff0c;平时主要精力没用在技术提升上&#xff0c;对于大厂的人情世故各类八卦倒是研究的透彻。 如果你细心观察&#xff0c;会发现一些大的公司里面&#xff0c;领导喜欢跨层与下属去沟通聊天&#xff0c;我待过几家比较大的公司&am…...

Android 面试题 避免OOM(内存优化)三

&#x1f525; OOM介绍&#xff08;out of memory 内存溢出&#xff09;&#x1f525; Android和java中都会出现由于不良代码引起的内存泄露&#xff0c;为了使Android应用程序能够快速高效的运行&#xff0c;Android每个应用程序都会有专门Dalvik虚拟机实例来运行&#xff0c;…...

SpringBoot集成Lock4j 底层使用Redission 实现分布锁

Lock4j 在分布式系统中&#xff0c;实现锁的功能对于保证数据一致性和避免并发冲突是非常重要的。Lock4j是一个简单易用的分布式锁框架&#xff0c;而Redisson是一个功能强大的分布式解决方案&#xff0c;可以与Lock4j进行集成。 操作步骤 第一步&#xff1a;添加依赖 首先&…...

TortoiseSVN操作使用

说明 SVN常用于程序代码版本控制,由于业务需求需将生产资料通过SVN进行管控,涉及人员众多,权限分支管理需要细化,特此记录SVN的学习操作. 前言 版本控制是管理信息修改的艺术&#xff0c;它一直是程序员最重要的工具&#xff0c;程序员经常会花时间作出小的修改&#xff0c; 然…...

第五篇-ChatGLM2-6B模型下载

下载chatglm2-6b模型文件 https://huggingface.co/THUDM/chatglm2-6b方法一&#xff1a;huggingface页面直接点击下载 一个一个下载&#xff0c;都要下载方法二&#xff1a;snapshot_download下载文件 可以使用如下代码下载 创建下载环境 conda create --name hfhub pytho…...

【Matlab】基于长短期记忆网络的数据分类预测(Excel可直接替换数据)

【Matlab】基于长短期记忆网络的数据分类预测(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码6.完整代码7.运行结果1.模型原理 “基于长短期记忆网络的数据分类预测”是一种利用长短期记忆网络(Long Short-Term Memory, LSTM)进行数据分类任务…...

C++网络编程 TCP套接字基础知识,利用TCP套接字实现客户端-服务端通信

1. TCP 套接字编程流程 1.1 概念 流式套接字编程针对TCP协议通信&#xff0c;即是面向对象的通信&#xff0c;分为服务端和客户端两部分。 1.2 服务端编程流程&#xff1a; 1&#xff09;加载套接字库&#xff08;使用函数WSAStartup()&#xff09;&#xff0c;创建套接字&…...

苍穹外卖-day07

苍穹外卖-day07 本项目学自黑马程序员的《苍穹外卖》项目&#xff0c;是瑞吉外卖的Plus版本 功能更多&#xff0c;更加丰富。 结合资料&#xff0c;和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频&#xff1a;https://www.bilibili.com/video/BV1TP411v7v6/?sp…...

简化Java单元测试数据

用EasyModeling简化Java单元测试 EasyModeling 是我在2021年圣诞假期期间开发的一个 Java 注解处理器&#xff0c;采用 Apache-2.0 开源协议。它可以帮助 Java 单元测试的编写者快速构造用于测试的数据模型实例&#xff0c;简化 Java 项目在单元测试中准备测试数据的工作&…...

P1041 [NOIP2003 提高组] 传染病控制

题目 题目背景 本题是错题&#xff0c;后来被证明没有靠谱的多项式复杂度的做法。测试数据非常的水&#xff0c;各种玄学-做法都可以通过&#xff0c;不代表算法正确。因此本题题目和数据仅供参考。 近来&#xff0c;一种新的传染病肆虐全球。蓬莱国也发现了零星感染者&#…...

TypeScript -- 基础类型

文章目录 TypeScript -- 基础类型let 和 const基本类型写法布尔类型 -- boolean数字类型 -- number字符串类型 -- string数组类型元组类型枚举类型 -- enum任意类型 -- any空值 -- voidNull 和 Undefined不存在的类型 -- never对象 -- object类型断言 TypeScript – 基础类型 1…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...