Uniapp-小程序简单的时间选择组件-年月日时分

文章目录

  • 前言
  • 一、组件效果
  • 二、组件代码
    • 使用
  • 总结


前言

uniapp小程序开发系列。本文实现一个简单时间选择控件。uniapp用个心仪时间控件真的麻烦。官方给得要么年月日,要么时分。产品只要年月日时分。这该怎么玩。旧项目没有引入ui框架,我也不想去引入,不然高低整一个vant 小程序版的。

uniapp生态中,有个插件市场,找了一通,是有时间控件。但是引入也是麻烦。没必要。下文基于网友给的案例再稍微改了改。对了 这是vue2 的 。


一、组件效果

二、组件代码

时间控件的实现代码,区分了闰年平年。需要秒的话,可以自行修改。

<template><div class="date-time" v-if="visible"><div class="mask" @click.stop="close" /><div class="box"><div class="header"><div class="determine" @click.stop="close">取消</div><div class="determine" @click.stop="confirm" :style="{color: themes.theme1 || '#FF4E09',}">确定</div></div><picker-view  :indicator-style="indicatorStyle" :value="value" @change="bindChange"class="picker-view"><picker-view-column><view class="item" v-for="(item,index) in years" :key="index">{{item}}</view></picker-view-column><picker-view-column><view class="item" v-for="(item,index) in months" :key="index">{{item}}</view></picker-view-column><picker-view-column><view class="item" v-for="(item,index) in days" :key="index">{{item}}</view></picker-view-column><picker-view-column><view class="item" v-for="(item,index) in hours" :key="index">{{item}}</view></picker-view-column><picker-view-column><view class="item" v-for="(item,index) in minutes" :key="index">{{item}}</view></picker-view-column></picker-view></div></div>
</template>
<script>export default {data() {return {years: [],year: null,months: [],month: null,days: [],day: null,hours: [],hour: null,minutes: [],minute: null,value: [],indicatorStyle: `height: 50px;`,timeValue: ''}},props: {visible: {type: Boolean,default: false},themes: {type: Object,default() {return {};},},interviewTime: {type: String,default() {return '';},}},mounted() {this.init();},watch: {visible: {handler(newValue, oldValue) {if (newValue) {if (this.interviewTime) {this.init(this.interviewTime);}}},immediate: false,deep: true}},methods: {init(interviewTime) {const date = interviewTime ? new Date(interviewTime) : new Date();const years = []const year = date.getFullYear()const months = []const month = date.getMonth() + 1const days = []const day = date.getDate()const hours = []const hour = date.getHours()const minutes = []const minute = date.getMinutes()let isDay = 30;if (month == 2) {if((year%4==0 && year%100!=0)||(year%400==0)){console.log('闰年')isDay = 29;}else {isDay = 28;console.log('平年')}} else if ([1,3,5,7,8,10,12].includes(month)) {isDay = 31;} else {isDay = 30;}for (let i = date.getFullYear(); i <= date.getFullYear()+2; i++) {years.push(i)}for (let i = 1; i <= 12; i++) {months.push(i)}for (let i = 1; i <= isDay; i++) {days.push(i)}for (let i = 0; i <= 23; i++) {if (i < 10) {hours.push('0' + i)} else {hours.push(i)}}for (let i = 0; i <= 59; i++) {if (i < 10) {minutes.push('0' + i)} else {minutes.push(i)}}this.years = yearsthis.year = yearthis.months = monthsthis.month = monththis.days = daysthis.day = daythis.hours = hoursthis.hour = hourthis.minutes = minutesthis.minute = minutethis.value = [0, month-1, day-1, hour, minute]},bindChange: function (e) {const val = e.detail.valueconsole.log('日期变化',val)let year = this.years[val[0]] let isDay = 30, days = [];if (val[1]+1 == 2) {if((val[0]%4==0 && year%100!=0)||(year%400==0)){console.log('闰年')isDay = 29;}else {isDay = 28;console.log('平年')}} else if ([1,3,5,7,8,10,12].includes(val[1]+1)) {isDay = 31;} else {isDay = 30;}for (let i = 1; i <= isDay; i++) {days.push(i)}this.days = days;this.year = this.years[val[0]]this.month =  this.months[val[1]]this.day = this.days[val[2]]this.hour = this.hours[val[3]]this.minute = this.minutes[val[4]]},// 补0padZeroStr(originStr){if(+originStr < 10){return  String(originStr).padStart(2,'0')}return originStr + ''},close(){this.$emit('update:visible', false);},confirm() {let monthStr = this.padZeroStr(this.month)let dayStr = this.padZeroStr(this.day)let hourStr = this.padZeroStr(this.hour)let minuteStr = this.padZeroStr(this.minute)this.timeValue = `${this.year}/${monthStr}/${dayStr} ${hourStr}:${minuteStr}:00`;this.$emit('confirmPickDate', this.timeValue);this.$emit('update:visible', false);},},}
</script>
<style lang="scss" scoped>.date-time {position: fixed;top: 0;left: 0;width: 100%;height: 100vh;z-index: 99999;.mask {position: absolute;top: 0;background: rgba(0, 0, 0, 0.5);width: 100%;height: 100vh;}.box {position: absolute;width: 100%;bottom: 0;background-color: #fff;border-radius: 20rpx 20rpx 0 0;overflow: hidden;height: 600rpx;.header {height: 88rpx;padding: 0 30rpx;border-bottom: 1rpx solid #e5e5e5;display: flex;align-items: center;justify-content: space-between;.determine {color: #333333;font-size: 32rpx;font-family: PingFang SC, PingFang SC-Regular;font-weight: 400;}}.picker-view {width: 100%;height: 400rpx;}.item {height: 100rpx;line-height: 100rpx;align-items: center;justify-content: center;text-align: center;font-size: 32rpx;font-family: PingFang SC-Regular, PingFang SC;font-weight: 400;color: #333333;}}}
</style>

使用

在你需要的文件引入组件。

<template><view class="example-body" @click="showDatePickClick"><view class="uni-input" style="text-align: right;" >{{interviewTime.substring(0,16)}}</view><my-date-picker  :visible.sync="visible" :interviewTime="interviewTime" @confirmPickDate="confirmPickDate" /></view>
</template>
<script>
import myDatePicker from '../components/date-picker.vue';export default {name: "XXXX-XX",props: {address: Array},components: {myDatePicker},data() {return {interviewTime:'',visible:false}},mounted(){this.interviewTime = this.getDate()},methods: {confirmPickDate(dateStr){console.log('confirmPickDate',dateStr)this.interviewTime = dateStrthis.$emit("getPickDate", dateStr);},showDatePickClick(){console.log('showDatePickClick')this.visible = true},getDate(type) {const date = new Date();let year = date.getFullYear();let month = date.getMonth() + 1;let day = date.getDate();month = month > 9 ? month : '0' + month;day = day > 9 ? day : '0' + day;return `${year}/${month}/${day} 00:00:00`;}}
}
</script><style scoped>
.example-body {width: 270px;height: 30px;background-color: #fff;}
</style>

总结

以上就是今天要讲的内容,本文讨论了用uniapp 实现小程序时间选择组件 仅仅支持 年月日时分 的简单版本。

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

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

相关文章

如何连接ACL认证的Redis

点击上方蓝字关注我 应用程序连接开启了ACL认证的Redis时与原先的方式有差别&#xff0c;本文介绍几种连接开启ACL认证的Redis的Redis的方法。 对于RedisACL认证相关内容&#xff0c;可以参考历史文章&#xff1a; Redis权限管理体系(一&#xff09;&#xff1a;客户端名及用户…

python 中 ftplib库的使用说明

在Python3中&#xff0c;ftplib库是用于处理FTP协议的内置模块。以下是一些使用ftplib库的基本操作示例和说明&#xff1a; 连接与登录FTP服务器 from ftplib import FTP# 创建一个FTP对象 ftp FTP()# 连接到FTP服务器 ftp.connect(ftp.example.com, port21) # 默认端口为2…

【二十七】【C++】二叉树练习

606. 根据二叉树创建字符串 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省略所有不影响字符串与…

【无刷电机学习】各种电机优势比较

目录 0 参考出处 1 有刷与无刷比较 2 交流与直流比较 3 内转子与外转子比较 4 Delta型与Y型定子绕向比较 5 低压BLDC的一些优点 0 参考出处 【仅作自学记录&#xff0c;不出于任何商业目的。如有侵权&#xff0c;请联系删除&#xff0c;谢谢&#xff01;】 维基百科…

C++力扣题目139--单词拆分 198--打家劫舍 213--打家劫舍II 337打家劫舍III

139.单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#xff1a; 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 …

Java代理模式:实现灵活的控制访问

Java代理模式&#xff1a;实现灵活的控制访问 代理模式是常用的设计模式之一&#xff0c;它提供了一种方式来控制对某个对象的访问&#xff0c;通过引入一个代理对象来间接访问目标对象。在Java中&#xff0c;代理模式广泛应用于远程方法调用、AOP&#xff08;面向切面编程&am…

Unity中URP实现水体效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

knife4j springboot3使用

简介 在日常开发中&#xff0c;写接口文档是我们必不可少的&#xff0c;而Knife4j就是一个接口文档工具&#xff0c;可以看作是Swagger的升级版&#xff0c;但是界面比Swagger更好看&#xff0c;功能更丰富 使用 我使用的是springboot3.2.3 knife4j 4.3.0,knife4j 4.4版本有…

自动化操作读写Excel —— xlrd 和 xlwt 模块参数说明与代码实战【第95篇—自动化操作读写Excel 】

自动化操作读写Excel —— xlrd 和 xlwt 模块参数说明与代码实战 在日常工作中&#xff0c;Excel表格是不可或缺的数据处理工具。为了提高工作效率&#xff0c;Python中的xlrd和xlwt模块为我们提供了强大的功能&#xff0c;使得自动化操作Excel变得更加简便。本文将介绍xlrd和…

「优选算法刷题」:两数之和

一、题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任…

【心得】如何做一个靠谱的程序员

你是否曾经遇到过一些不应该出现的小 BUG &#xff0c;比如路径错了一个字母&#xff0c;进而找不到文件 File no found&#xff0c; 写的小功能 直接用错了变量&#xff0c;进而出现一些莫名其妙的问题。这些问题容易解决&#xff0c;但也浪费了我们不少时间。 那么&#xff…

利用nginx内部访问特性实现静态资源授权访问

在nginx中&#xff0c;将静态资源设为internal&#xff1b;然后将前端的静态资源地址改为指向后端&#xff0c;在后端的响应头部中写上静态资源地址。 近期客户对我们项目做安全性测评&#xff0c;暴露出一些安全性问题&#xff0c;其中一个是有些静态页面&#xff08;*.html&…

线性代数:向量、张量、矩阵和标量

线性代数&#xff1a;向量、张量、矩阵和标量 背景 在线性代数中&#xff0c;向量、张量、矩阵和标量都属于基础概念&#xff0c;特别是最近AI的爆火&#xff0c;向量和张量的概念也越来越普及&#xff0c;本文将介绍下这些基本概念。 1. 标量&#xff08;Scalar&#xff0…

QT QString和QStringLiteral的区别

一、理解QStringLiteral 1、QStringLiteral是Qt提供的一个宏&#xff0c;用于在编译时创建一个QString对象。它的主要作用是将字符串字面值转换为QString对象&#xff0c;同时提高运行性能和减少内存占用。 2、使用QStringLiteral宏可以避免在运行时创建QString对象&#xff…

GORM入门到精通:构建高效Go应用的终极指南

文章目录 什么是GORM&#xff1f;为什么选择GORM&#xff1f; GORM的基本使用GORM的高级特性关联事务钩子 数据迁移与模型定义数据迁移模型定义 预加载与关联查询预加载关联查询 查询构建器基本查询条件查询范围查询排序、分组和限制 事务管理开始事务事务操作提交事务 钩子&am…

【正则】正则表达式总结

文章目录 1 语法总结2 常用匹配表达式2.1 日期匹配2.2 go实现IP匹配 Reference 1 语法总结 元字符&#xff1a; .&#xff1a;匹配任意单个字符&#xff08;除了换行符&#xff09;。 *&#xff1a;匹配前面的子表达式零次或多次。 &#xff1a;匹配前面的子表达式一次或多次。…

2024牛客寒假算法基础集训营5

K soyorin的通知 完全背包加不少于的模型 由于人数只有1000&#xff0c;那么 bi 实际有效的范围只有1000左右&#xff0c;并且&#xff0c;soyorin至少要花一次 p 的代价将消息通知给 1 个人&#xff0c;然后再让这个人去将消息通知给剩下的 n−1 个人。 ​ 那么问题就转化…

解密与恢复:应对. helper勒索病毒的实用建议

引言&#xff1a; 近年来&#xff0c;勒索病毒已成为网络安全领域的一大威胁&#xff0c;而其中一种名为.helper的勒索病毒备受关注。本文将介绍.helper勒索病毒的特点、数据恢复方法以及预防措施&#xff0c;帮助读者更好地理解和防范这种恶意软件的攻击。如不幸感染这个勒索…

【深度学习目标检测】十八、基于深度学习的人脸检测系统-含GUI和源码(python,yolov8)

人脸检测是计算机视觉中的一个重要方向&#xff0c;也是一个和人们生活息息相关的研究方向&#xff0c;因为人脸是人最重要的外貌特征。人脸检测技术的重要性主要体现在以下几个方面&#xff1a; 人脸识别与安全&#xff1a;人脸检测是人脸识别系统的一个关键部分&#xff0c;是…

二维矩阵子集的最大值

登录—专业IT笔试面试备考平台_牛客网 正好遇到了 对于一维,我们只需要贪一次 int ans -1E9; int suf -1E9; for (int i 0; i < n; i) {if (i && (a[i] - a[i - 1]) % 2 0) {suf 0;}suf std::max(suf, 0) a[i];ans std::max(ans, suf); } ans就是最大值…