uni-app yrkDataPicker 日期和时间选择控件
uni-app 选择日期时间控件有 2 月份有 31 天的问题,一直没有修复,uni-calendar 苹果有选择年份和月份后无法显示问题。自己写了一个,只支持 H5 和微信小程序,其他没有试过。
<template><view class="yrk-data-picker"><uni-popup ref="pickerView" type="bottom" style="z-index: 9999999;"><view class="popup-view"><view class="popup-view-header"><view class="popup-view-cancel" @click="pickerCancel">取消</view><view class="popup-view-confirm" @click="pickerConfirm">完成</view></view><picker-view v-if="visible" :indicator-style="indicatorStyle" :value="values" @change="bindChange" class="picker-view"><picker-view-column :style="dateStyle"><view class="item" v-for="(item,index) in years" :key="index">{{formatTime(item)}}{{labels[0]}}</view></picker-view-column><picker-view-column :style="dateStyle"><view class="item" v-for="(item,index) in months" :key="index">{{formatTime(item)}}{{labels[1]}}</view></picker-view-column><picker-view-column :style="dateStyle"><view class="item" v-for="(item,index) in days" :key="index">{{formatTime(item)}}{{labels[2]}}</view></picker-view-column><picker-view-column :style="timeStyle"><view class="item" v-for="(item,index) in hours" :key="index">{{formatTime(item)}}{{labels[3]}}</view></picker-view-column><picker-view-column :style="timeStyle"><view class="item" v-for="(item,index) in minutes" :key="index">{{formatTime(item)}}{{labels[4]}}</view></picker-view-column></picker-view></view></uni-popup></view>
</template><script>const da = new Date()/*** yrkDataPicker 日期和时间选择控件* @description 日期和时间选择控件 * @copyright https://my.oschina.net/lovelong1/* @property {Number} startYear 年份开始日期,默认1900* @property {Number} endYear 年份结束日期 默认当前年份* @property {String} mode = ['date','time','datetime'] 选择模式,日期,时间,日期时间,不包含秒针。* @property {String} value 默认日期 格式,'1900-01-01 01:01:01' 默认当前,目前只支持全* @event {Function} change 控件更换 参数 event 参考 picker-view change* @event {Function} cancel 选择取消按钮 * @event {Function} confirm 选择确认按钮 参数 格式化日期 Date数据* @example <yrk-data-picker ref="pickerView" mode="time" value="1981-05-01 23:01:01" @confirm="pickerConfirm"></yrk-data-picker>* 显示控件 this.$refs.pickerView.open('bottom');* 关闭控件 this.$refs.pickerView.close();* pickerConfirm(dateStr,da){ console.log(dataStr,da); }*/ export default {name:'yrkDataPicker',props: {startYear: { type: Number, default: 1900 },endYear: { type: Number, default: da.getFullYear() },mode: { type: String, default: 'time' },value: { type: String, default: null },},computed: {// 解决微信不显示问题。dateStyle() { return this.getStyle(['date','datetime']) },timeStyle() { return this.getStyle(['time','datetime']) }},watch: {mode:{immediate:true,handler(newValue, oldValue){this.init()}},value:{immediate:true,handler(newValue, oldValue){this.init()}}},data() {return {visible: true,tempvalues:[],//临时保存数据values:[],defaults:[{start:1900,end:da.getFullYear()},{start:1,end:12},{start:1,end:31},{start:0,end:23},{start:0,end:59}],labels:['年','月','日','点','分'],keys:['years','months','days','hours','minutes'],years:[],months :[],days :[],hours:[],minutes:[],indicatorStyle: ``,}},created() {this.defaults[0]={start:this.startYear,end:this.endYear};this.defaults.forEach((item,index)=>{for(let i = item.start;i<=item.end;i++){this[this.keys[index]].push(i);}})},methods: {getStyle(modes){const isShow = modes.includes(this.mode);return `flex:${isShow?1:0};width:${isShow?'auto':'0px'};`},init(){this.$nextTick(()=>{let year = da.getFullYear();let month = da.getMonth();let day = da.getDate();let hour = da.getHours();let minute = da.getMinutes();if(this.value){const val = this.parse(this.value);year = val.getFullYear();month = val.getMonth();day = val.getDate();hour = val.getHours();minute = val.getMinutes();}year = year - this.startYear;this.values = [0, 0, 0, 0, 0];setTimeout(()=>{this.values = [year, month, day-1,hour,minute];},0)this.upDays(year, month);})},parse: function(str) {var a = str.split(/[^0-9]/);return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);},open(e){this.$refs.pickerView.open(e);},close(){this.$refs.pickerView.close();this.$emit('close')},pickerCancel() {this.$refs.pickerView.close();this.$emit('cancel')},formatTime(t){return (t<10?`0`:'')+t},pickerConfirm() {this.values = this.tempvalues;let year = this.formatTime(this.years[this.values[0]]);let month = this.formatTime(this.months[this.values[1]]) ;let day = this.formatTime(this.days[this.values[2]]) ;let hour = this.formatTime(this.hours[this.values[3]]);let minute = this.formatTime(this.minutes[this.values[4]]) ;let value = `${year}-${month}-${day} ${hour}:${minute}:00`if(this.mode==='date'){value = `${year}-${month}-${day}`}else if(this.mode==='time'){value = `${hour}:${minute}`}this.$refs.pickerView.close();// console.log(value ,new Date(year,month-1,day,hour,minute,0))this.$emit('confirm', value ,new Date(year,month-1,day,hour,minute,0))},bindChange(e){// console.log(e);if(this.values[1] != e.detail.value[1]){const year = e.detail.value[0]+this.startYear;const month = e.detail.value[1]+1;this.upDays(year, month);}this.tempvalues = e.detail.value;this.$emit('change', e)},upDays(year,month){const monthDays = this.getMonthDaysByYearMonth(year,month);this.days = [];for (let i = 1; i <= monthDays; i++) this.days.push(i);},getMonthDaysByDate(da){return this.getMonthDaysByYearMonth(da.getFullYear(), da.getMonth);},getMonthDaysByYearMonth(year=1900,month=0){return new Date(year, month,0).getDate();}}}
</script><style lang="scss">.popup-view {background-color: #FFFFFF;.popup-view-header {display: flex;flex-direction: row;justify-content: space-between;align-items: center;border-bottom: 1px solid #F5F5F5;.popup-view-cancel,.popup-view-confirm {box-sizing: border-box;padding: 0 28rpx;font-size: 34rpx;line-height: 90rpx;}.popup-view-cancel{color: #888888;}.popup-view-confirm{color: #007aff;}}.picker-view {height: 476rpx;margin-top: 20rpx;.item{text-align: center;display: flex;flex-direction: column;align-items: center;justify-content: center;}}picker-view-column{// display: flex;}}
</style>
相关文章:
uni-app yrkDataPicker 日期和时间选择控件
uni-app 选择日期时间控件有 2 月份有 31 天的问题,一直没有修复,uni-calendar 苹果有选择年份和月份后无法显示问题。自己写了一个,只支持 H5 和微信小程序,其他没有试过。 <template><view class"yrk-data-picke…...

PAM从入门到精通(十九)
接前一篇文章:PAM从入门到精通(十八) 本文参考: 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构: 更加形象的形式: 六、整体流程示例 2.…...

apache httpd 多后缀解析漏洞
形成原因 Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令 在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单…...
Flutter ☞ 数据类型
数值类型 int、double、num int 整型,取值通常在 -253 ~ 253 之间 int class double 64-bt(双精度)浮点数,符合 IEEE 754 标准。 double class num 数值类型的基类,int 和 double 都继承自num。 num class 数值转换 // String -> …...

MyBatis-Plus 实战教程一
这里写目录标题 简介快速上手数据库建立创建实体类修改参数引入依赖测试常见注解介绍TableNameTableIdTableField 常见配置仓库地址 简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,…...

闭包(函数)
把内部函数通过return扔出去 必要条件...

Go包介绍与初始化:搞清Go程序的执行次序
Go包介绍与初始化:搞清Go程序的执行次序 文章目录 Go包介绍与初始化:搞清Go程序的执行次序一、main.main 函数:Go 应用的入口函数1.1 main.main 函数1.2 main.main 函数特点 二、包介绍2.1 包介绍与声明2.2 非 main包的 main 函数2.3 包的命名…...

Python教程(15)——Python流程控制语句详解
目录 if语句else if语句for循环遍历类型range关键字 while循环break语句continue语句 Python流程控制是Python编程中非常重要的一部分,它用于控制程序的执行流程。Python提供了多种流程控制语句,包括if语句、while循环、for循环、break和continue语句等。…...

JavaScript基础知识16——分支语句
哈喽,大家好,我是雷工。 今天学习JavaScript基础知识的分支语句,以下为学习笔记。 1、程序三大流程控制语句 ○写几句就从上往下执行几句,这种叫做顺序结构; ○有时要根据条件选择执行代码,这种叫分支结构…...

web开发初级工程师学习笔记
web开发初级工程师学习笔记 前端开发工具实验1 VS Code 初体验介绍 前端开发工具 实验1 VS Code 初体验 介绍 VS Code 环境提供的是一个可以在浏览器中使用原生 VS Code 编辑代码的程序。在该环境中,你可以使用到与本地安装近乎一致的 VS Code 程序来编辑代码文件…...

Linux下Samba服务安装及启用全攻略
Linux下Samba服务安装及启用全攻略 前言一、安装SSH Server二、安装Samba Server1.安装net-tool2.建立账号的samba3.windows通过Samba与linux共享文件4.使用远程工具登录Linux 总结 前言 提示:本文详解了在Linux系统下如何安装和启用Samba服务,涵盖了从…...

【C++】引用’‘的深入解析
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
java链式编程对象序列化问题
在使用 openfeign 进行服务之间数据传输时发现了一个问题,数据在下游正常处理,响应到调用端数据也读取到了,但是就是 jackson 转对象序列化时出了问题,异常如下 Failed to complete request: feign.codec.DecodeException: Type d…...
关于Redis(Redisson)超时问题的分析
概述 生产环境中流量高峰期会出现短时间的redis异常,主要报错如下: Redis server response timeoutRedisTimeoutException: Command execution timeout for command: (PING)Command still hasn’t been written into connection! 根据redisson官方所述…...

Redis 主从复制,哨兵,集群——(2)哨兵篇
目录 1. Redis 哨兵是什么? 2. Redis 哨兵有什么用? 2.1 主动监控 2.2 消息通知 2.3 故障转移 2.4 配置中心 3. Redis 哨兵数量配备要求 4. 哨兵配置文件详解 5. quorum 投票数详解 5.1 quorum 的含义 5.2 网络抖动导致主观下线 5.3 quorum …...
C++入门笔记分享
有道云笔记...

使用conda install一直卡在solving environment的解决方法
使用国内镜像源,但install仍旧一直卡在solving environment,超过10分钟就不用等了; 检查C:\Users\UserName 路径下的.condarc文件 将这个defaults这一行删掉即可...
神经网络和AI的关系
神经网络(Neural Networks)和人工智能(Artificial Intelligence,AI)之间存在紧密的关系,可以概括为以下几点: 神经网络是AI的子领域:神经网络是人工智能的一个子领域,它是…...

[牛客]计算机网络习题笔记_1020
1、物理层:以太网 调制解调器 电力线通信(PLC) SONET/SDH G.709 光导纤维 同轴电缆 双绞线等。 2、数据链路层(网络接口层包括物理层和数据链路层):Wi-Fi(IEEE 802.11) WiMAX(IEEE 802.16) ATM DTM 令牌环 以太网 FDD…...

蓝牙音视频远程控制协议(AVRCP)介绍
零.声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。 第二篇:Trans…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...