微信小程序picker组件扩展选择时间到秒插件

创建插件seldatetime

// 插件JS部分
Component({// 一些选项options: {// 样式隔离:apply-shared 父影响子,shared父子相互影响, isolated相互隔离styleIsolation:"isolated",// 允许多个插槽multipleSlots: true},// 组件的对外属性:在 properties 定义段中,属性名采用驼峰写法(propertyName);在 wxml 中,指定属性值时则对应使用连字符写法(property-name="")properties: {// 传递默认选中日期value: String,// 最大时间end: String,// 最小时间start: String},// 组件的内部数据data: {currKey: [],// 当前选中的时间下标item: [],// 当前选中时间,格式[2023, 12, 22, 10, 8]list: [],// 时间多列数据集,格式[[], [], [], [], []]},// 类似于 mixins 和 traits 的组件间代码复用机制behaviors: [],// 组件数据字段监听器,用于监听 properties 和 data 的变化observers:{},// 组件间关系定义relations: {},// 通过组件的外部类实现父组件控制子自己的样式externalClasses: [],// 组件生命周期声明对象lifetimes: {attached(){this._initialize()},moved(){},detached(){}},// 组件所在页面的生命周期声明对象pageLifetimes: {show(){},hide(){},resize(){}},/*** 在组件实例刚刚被创建时执行。* 组件实例刚刚被创建好时, created 生命周期被触发。此时,组件数据 this.data 就是在 Component 构造器中定义的数据 data。 此时还不能调用 setData 。 通常情况下,这个生命周期只应该用于给组件 this 添加一些自定义属性字段*/created(){},/*** 在组件实例进入页面节点树时执行* 在组件完全初始化完毕、进入页面节点树后, attached 生命周期被触发。此时, this.data 已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行  */ attached(){},/*** 在组件在视图层布局完成后执行*/ready(){},/*** 在组件实例被移动到节点树另一个位置时执行*/moved() {},/*** 在组件实例被从页面节点树移除时执行* 在组件离开页面节点树后, detached 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则 detached 会被触发*/ detached() {},/*** 每当组件方法抛出错误时执行*/error(){},/*** 组件的方法,包括事件响应函数和任意的自定义方法*/methods: {/*** 自定义初始化方法*/_initialize() {this.setData({item: this.datetimeStringToArray(this.data.value || this.getCurrDatetime()),})this.setDatetimeList()},/*** value 改变时触发 change 事件,event.detail = {value}*/changeDatetime(e){this.triggerEvent('change', {value: this.datetimeArrayToString(this.data.item)})},/*** 选择每列时间都会触发*/columnChangeDatetime({ detail }){var column = detail.column;var value = detail.value;this.data.item[column] = parseInt(this.data.list[column][value]);this.setData({item: this.data.item})this.setDatetimeList()},/*** 设置时间列数据集* @param {*} datetime */setDatetimeList(){var datetime = this.data.item;var currYear = new Date().getFullYear();var startArr = this.datetimeStringToArray(this.data.start || (currYear - 100) + '-01-01 01:01');var endArr = this.datetimeStringToArray(this.data.end || (currYear + 100) + '-12-31 24:59');var startStr = startArr.join('');var endStr = endArr.join('');var datetimeStr = datetime.join('');var yearArr = this.getColumnBetweenArray(startArr[0], endArr[0], '年');// 计算开始月var startMonth = (datetimeStr.substr(0, 4) <= startStr.substr(0, 4) ? startArr[1] : 1);// 计算结束月var endMonth = (datetimeStr.substr(0, 4) >= endStr.substr(0, 4) ? endArr[1] : 12);var monthArr = this.getColumnBetweenArray(startMonth, endMonth, '月');// 计算开始日var startDay = (datetimeStr.substr(0, 6) <= startStr.substr(0, 6) ? startArr[2] : 1);// 计算每年这个月的天数var dayCount = new Date(datetime[0], datetime[1], 0).getDate();// 计算结束日var endDay = (datetimeStr.substr(0, 6) >= endStr.substr(0, 6) ? endArr[2] : dayCount);var dayArr = this.getColumnBetweenArray(startDay, endDay, '日');// 计算开始小时var startHour = (datetimeStr.substr(0, 8) <= startStr.substr(0, 8) ? startArr[3] : 1);// 计算结束小时var endHour = (datetimeStr.substr(0, 8) >= endStr.substr(0, 8) ? endArr[3] : 24);var hourArr = this.getColumnBetweenArray(startHour, endHour, '时');// 计算开始分钟var startMinute = (datetimeStr.substr(0, 10) <= startStr.substr(0, 10) ? startArr[4] : 1);// 计算结束分钟var endMinute = (datetimeStr.substr(0, 10) >= endStr.substr(0, 10) ? endArr[4] : 59);var minuteArr = this.getColumnBetweenArray(startMinute, endMinute, '分');// 计算当前时间的下标var yearKey = this.getKey(yearArr, datetime[0]);var monthKey = this.getKey(monthArr, datetime[1])var dayKey = this.getKey(dayArr, datetime[2])var hourKey = this.getKey(hourArr, datetime[3])var minuteKey = this.getKey(minuteArr, datetime[4])this.setData({currKey: [yearKey, monthKey, dayKey, hourKey, minuteKey],list: [yearArr, monthArr, dayArr, hourArr, minuteArr],item: [parseInt(yearArr[yearKey]), parseInt(monthArr[monthKey]), parseInt(dayArr[dayKey]), parseInt(hourArr[hourKey]), parseInt(minuteArr[minuteKey])]})},/*** 获取数值之间数据列表* @param {*} start * @param {*} end */getColumnBetweenArray(start, end, unit){var resArray = [];for(var i = start;i <= end; i++){resArray.push(this.zeroize(i) + unit);}return resArray;},/*** 获取KEY* @param {*} array * @param {*} item */getKey(array, item){var key = array.findIndex(value => parseInt(item) == parseInt(value));if(key === -1){return 0;}return key;},/*** 补零* @param {*} number */zeroize(number){return number < 10 ? '0' + number : number;},/*** 获取当前时间*/getCurrDatetime(){var d = new Date();var year = d.getFullYear()var month = d.getMonth() + 1var day = d.getDate();var hours = d.getHours()var minutes = d.getMinutes()return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes;},/*** 时间字符串转数组* @param {*} datetime */datetimeStringToArray(datetime){return datetime.replace(/-|:/g, ' ').split(' ').map(item => parseInt(item));},/*** 时间数组转字符串* @param {*} datetime */datetimeArrayToString(datetime){return datetime[0] + '-' + datetime[1] + '-' + datetime[2] + ' ' + datetime[3] + ':' + datetime[4]}},
})// wxml部分
<picker mode="multiSelector" range="{{ list }}" value="{{ currKey }}" bindchange="changeDatetime" bindcolumnchange="columnChangeDatetime"><slot></slot>
</picker>

app.json配置

"usingComponents": {"d-demo": "../../components/seldatetime/index"
},

page页面中调用

// wxml文件内容
<d-demo value="{{ value }}" start="2020-01-01 05:20" end="2060-12-30 18:51" bindchange="selectDatetime"><input value="{{ value }}" placeholder="请选择时间" style="border: 1px solid #e2e2e2;padding: 10px;border-radius: 5px;"  />
</d-demo>// JS文件内容
Page({/*** 页面的初始数据*/data: {value: '2023-12-22 16:50',},/*** 选择时间*/selectDatetime(e){var d = e.detailthis.setData({value: d.value})}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226439.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习三要素与拟合问题

1.如何构建机器学习模型&#xff1f; 机器学习工作流程总结 1.获取数据 2.数据基本处理 3.特征工程 4.机器学习(模型训练) 5.模型评估 结果达到要求&#xff0c;上线服务&#xff0c;没有达到要求&#xff0c;重新上面步骤 我们使用机器学习监督学习分类预测模型的工作流…

SLF4J: Class path contains multiple SLF4J bindings.解决

背景 项目正常运行几年&#xff0c;近期优化调整修复漏洞&#xff0c;依赖升级后cleaninstall 重启发现项目启动失败&#xff0c;访问所有接口都报错404 错误信息 output输出异常信息截图 tomcat 打印异常信息截图 output打印异常信息详情 D:\javaRuanJian\Tomcat\apach…

人工智能的新篇章:深入了解大型语言模型(LLM)的应用与前景

LLM&#xff08;Large Language Model&#xff09;技术是一种基于深度学习的自然语言处理技术&#xff0c;旨在训练能够处理和生成自然语言文本的大型模型。 LLM 技术的核心思想是使用深度神经网络&#xff0c;通过大规模的文本数据预训练模型&#xff0c;并利用这些预训练模型…

linux 防火墙查看放行端口,追加放行端口命令

linux 查看防火墙已经放行端口列表 firewall-cmd --list-ports 运行结果如下&#xff1a; linux 追加防火墙经放行端口&#xff08;如追加443&#xff09; firewall-cmd --zonepublic --add-port443/tcp --permanent 亲测有效&#xff01;

【WPF.NET开发】路由事件

本文内容 先决条件什么是路由事件&#xff1f;路由策略为什么使用路由事件&#xff1f;附加并实现路由事件处理程序类处理程序WPF 中的附加事件XAML 中的限定事件名称WPF 输入事件EventSetter 和 EventTrigger Windows Presentation Foundation (WPF) 应用程序开发人员和组件…

FileZilla的使用主动模式与被动模式

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、FileZilla简介 1、FileZilla是什么&#xff1f; 2、FileZilla的应用场景 二、FileZilla的安装 1、下…

【直播预告】刘军博士:科学研究中的AI计算:何助力团队协作创新

【直播预告】随着数据、算法、算力的融合发展&#xff0c;AI已经成为科学和工程研究的不可或缺的力量&#xff0c;涉足药物设计、天气预测、新材料研发等领域。在AI领域&#xff0c;协作是关键。欢迎大家关注12月28日20:00九章云极资深数据科学家刘军博士的直播&#xff01;刘军…

HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.

软件版本&#xff1a;HLS 2017.4 在使用 HLS 导出 RTL 的过程中产生如下错误&#xff1a; 参考 Xilinx 解决方案&#xff1a;https://support.xilinx.com/s/article/76960?languageen_US 问题描述 DESCRIPTION As of January 1st 2022, the export_ip command used by Vivad…

【计算机视觉】角点检测(Harris、SIFT)

Harris 角点指的是窗口延任意方向移动&#xff0c;都有很大变化量的点。 用数学公式表示为&#xff1a; E(u,v)反映的移动后窗口的差异&#xff0c;w(x,y)为每个像素的点权值&#xff0c;I(xu,yv)是移动的像素值&#xff0c;I(x,y)是移动前的像素值。 将E(u,v)进行泰勒展开&am…

MySQL进阶之(一)逻辑架构

一、逻辑架构 1.1 逻辑架构剖析1.1.1 连接层1.1.2 服务层01、基础服务组件02、SQL Interface&#xff1a;SQL 接口03、Parser&#xff1a;解析器04、Optimizer&#xff1a;查询优化器05、Caches & Buffers&#xff1a; 查询缓存组件 1.1.3 引擎层1.1.4 存储层1.1.5 总结 1.…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据&#xff0c;在主中心搭建了个集群&#xff0c;随着es在我们系统中的地位越来越重要&#xff0c;数据也越来越多&#xff0c;针对它的安全性问题也越发重要&#xff0c;那如何对es做异地容灾呢&#xff1f; 今天咱们就一起看下官方提供的…

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…

大数据与人工智能|万物皆算法(第三节)

要点一&#xff1a;数据与智能的关系 1. 一切的核心都是数据&#xff0c;数据和智能之间是密切相关的。 数据是对客观现实的描述&#xff0c;而信息是数据转化而来的。 例如&#xff0c;24是数据&#xff0c;但说“今天的气温是24摄氏度”是信息&#xff0c;而说“班可以分成24…

How to Develop Word Embeddings in Python with Gensim

https://machinelearningmastery.com/develop-word-embeddings-python-gensim/ 本教程分为 6 个部分;他们是&#xff1a; 词嵌入 Gensim 库 开发 Word2Vec 嵌入 可视化单词嵌入 加载 Google 的 Word2Vec 嵌入 加载斯坦福大学的 GloVe 嵌入 词嵌入 单词嵌入是一种提供单词的…

web自动化(4)——POM设计重构

1. 什么是POM Page Object Model 是ui自动化测试中常见的封装方式。 原理&#xff1a;将页面封装为PO对象&#xff0c;然后通过面向对象的方式实现UI自动化 2. 封装原则 PO无需包含全部UI元素PO应当验证元素PO不应该包含断言PO不应该暴露元素 3. 怎么进行POM封装 面向对象…

IntelliJ IDE 插件开发 | (四)开发一个时间管理大师插件

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;开发一…

Flink1.17实战教程(第四篇:处理函数)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

【51单片机系列】DS18B20温度传感器扩展实验之设计一个智能温控系统

本文是关于DS18B20温度传感器的一个扩展实验。 文章目录 一、相关元件介绍二、实验分析三、proteus原理图设计四、软件设计 本扩展实验实现的功能&#xff1a;利用DS18B20设计一个智能温度控制系统&#xff0c;具有温度上下限值设定。当温度高于上限值时&#xff0c;电机开启&a…

2023年12月28日学习记录

目录 1、今日计划学习内容2、今日学习内容文献阅读—A Data-driven Base Station Sleeping Strategy Based on Traffic Prediction0、选这篇文章的原因1、文章的主要内容和贡献2、使用的数据集3、结果及分析4、郭郭有话说 整理流量预测的代码 3、今日学习总结 1、今日计划学习内…

边缘智能网关在智慧大棚上的应用突破物联网大关

边缘智能网关在智慧大棚上的应用&#xff0c;是现代农业技术的一大突破。通过与农作物生长模型的结合&#xff0c;边缘智能网关可以根据实时的环境数据和历史数据&#xff0c;预测农作物的生长趋势和产量&#xff0c;提供决策支持和优化方案。这对于农民来说&#xff0c;不仅可…