vue小程序,自定义时间选择器

这篇具有很好参考价值的文章主要介绍了vue小程序,自定义时间选择器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序已有的时间选择器与日期选择器无法支持自定义格式,需要使用多列选择器来定义

时间选择器仅支持hh:mm格式

vue小程序,自定义时间选择器

日期选择器仅支持YYYY-MM-DD格式

vue小程序,自定义时间选择器

 因为项目要求的格式为DD:hh:mm,我找了好久,也没找到解决办法,决定自己使用多列选择器来实现该功能

vue小程序,自定义时间选择器

 range:属性值为数组,如果为单列,则传一维数组,如果为多列,则传二维数组

多列:图中为三列,所以参数格式为[ [数组1], [数组2 ], [ 数组3] ]

vue小程序,自定义时间选择器

value: 属性值为数组,以上图为例,属性值为[0,0,1],表示range属性值的第一个数组中索引为0,第二个数组索引为0,第三个数组索引为1

 下面就是计算出来这个月中的天数,当天的小时数,以及分钟数,再将它们分别塞入range属性值中的对应数组中去

话不多说,直接上代码

html:

<picker mode="multiSelector" @change="bindMultiPickerChange" @columnchange="bindMultiPickerColumnChange" :value="multiIndex" :range="multiArray">
    <view>指定时间发布</view>
</picker>

js中的Data部分:

      // 时间选择器
      multiArray: [],
      multiIndex: [0, 0, 0],
      year: '',
      month: '',
      day: '',
      hour: '',
      minute: '',
      // 时间选择器数据
      surplusDay: [],
      surplusHour: [],
      surplusMinute: []

js中的日期处理方法:

    bindMultiPickerChange () {
      wx.showToast({
        title: '敬请期待',
        icon: 'none'
      })
    },
    // 某一列的值改变时触发
    bindMultiPickerColumnChange (e) {
      let date = new Date()
      let year1 = date.getFullYear()
      let month1 = date.getMonth() + 1
      let day1 = date.getDate()
      let hour1 = date.getHours()
      console.log('修改的列为', e.mp.detail.column, ',值为', e.mp.detail.value)
      this.multiIndex[e.mp.detail.column] = e.mp.detail.value
      let a = this.multiArray[e.mp.detail.column][e.mp.detail.value]
      console.log('我的值为', a)
      let data = {
        multiArray: this.multiArray,
        multiIndex: this.multiIndex,
        year: this.year,
        month: this.month,
        day: this.day,
        hour: this.hour,
        minute: this.minute
      }
      data.multiIndex[e.mp.detail.column] = e.mp.detail.value
      switch (e.mp.detail.column) {
        case 0:
          console.log('选择天数' + data.multiArray[e.mp.detail.column][e.mp.detail.value])
          let dayStr = data.multiArray[e.mp.detail.column][e.mp.detail.value]
          let day = dayStr.substring(0, dayStr.length - 1)
          data.day = parseInt(day)
          if (data.year === year1 && month1 === data.month && data.day === day1) {
            this.surplusHour = this.surplusHourArray(this.year, this.month, this.day, this.hour)
            this.surplusMinute = this.surplusMinuteArray(this.year, this.month, this.day, this.hour, this.minute)
          } else {
            this.surplusHour = this.surplusHourArray(this.year, this.month, data.day, 0)
            this.surplusMinute = this.surplusMinuteArray(this.year, this.month, data.day, 0, 0)
          }
          this.multiArray[1] = this.surplusHour
          this.multiArray[2] = this.surplusMinute
          this.multiIndex[1] = 0
          this.multiIndex[2] = 0
          console.log('小时的集合', this.surplusHour)
          break
        case 1:
          console.log('选择时间' + data.multiArray[e.mp.detail.column][e.mp.detail.value])
          let hourStr = data.multiArray[e.mp.detail.column][e.mp.detail.value]
          let hour = hourStr.substring(0, hourStr.length - 1)
          data.hour = parseInt(hour)
          if (data.year === year1 && month1 === data.month && data.day === day1 && data.hour === hour1) {
            this.surplusMinute = this.surplusMinuteArray(this.year, this.month, this.day, this.hour, this.minute)
          } else {
            this.surplusMinute = this.surplusMinuteArray(this.year, this.month, this.day, data.hour, 0)
          }
          this.multiArray[2] = this.surplusMinute
          this.multiIndex[2] = 0
          console.log('小时的集合', this.surplusHour)
          break
      }
      // this.setData(data)
    },
    // 月份计算
    surplusMonth (year) {
      let date = new Date()
      let year2 = date.getFullYear()
      let month = date.getMonth() + 1
      let monthDatas = []
      if (year === year2) {
        monthDatas.push(month + '月')
        for (let i = month; i < 12; i++) {
          monthDatas.push(i + 1 + '月')
        }
      } else {
        for (let i = 0; i < 12; i++) {
          monthDatas.push(i + 1 + '月')
        }
      }
      return monthDatas
    },
    // 天数计算
    surplusDayArray (year, month, day) {
      let days = 31
      let dayDatas = []
      let date = new Date()
      let year2 = date.getFullYear()
      let month2 = date.getMonth() + 1
      switch (parseInt(month)) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
          days = 31
          break
        // 对于2月份需要判断是否为闰年
        case 2:
          if ((year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0)) {
            days = 29
            break
          } else {
            days = 28
            break
          }
        case 4:
        case 6:
        case 9:
        case 11:
          days = 30
          break
      }
      if (year === year2 && month === month2) {
        dayDatas.push(day + '日')
        for (var i = day; i < days; i++) {
          dayDatas.push(i + 1 + '日')
        }
      } else {
        console.log(month + '月' + days + '天')
        for (let i = 0; i < days; i++) {
          dayDatas.push(i + 1 + '日')
        }
      }
      return dayDatas
    },
    // 时间计算
    surplusHourArray (year, month, day, hour) {
      let date = new Date()
      let year2 = date.getFullYear()
      let month2 = date.getMonth() + 1
      let day2 = date.getDate()
      let hours = []
      if (year === year2 && month === month2 && day === day2) {
        hours.push(hour + '时')
        for (let i = hour; i < 23; i++) {
          hours.push(i + 1 + '时')
        }
      } else {
        for (let i = 0; i < 24; i++) {
          hours.push(i + '时')
        }
      }
      return hours
    },
    // 分钟计算
    surplusMinuteArray (year, month, day, hour, minute) {
      let date = new Date()
      let year2 = date.getFullYear()
      let month2 = date.getMonth() + 1
      let day2 = date.getDate()
      let hour2 = date.getHours()
      let minutes = []
      if (year === year2 && month === month2 && day === day2 && hour === hour2) {
        minutes.push(minute + '分')
        for (let i = minute; i < 59; i++) {
          minutes.push(i + 1 + '分')
        }
      } else {
        for (let i = 0; i < 60; i++) {
          minutes.push(i + '分')
        }
      }
      console.log('分钟', minutes)
      return minutes
    }
  }

最后是onLoad加载时的代码块:文章来源地址https://www.toymoban.com/news/detail-495148.html

onLoad () {
    let date = new Date()
    this.year = date.getFullYear()
    this.month = date.getMonth() + 1
    this.day = date.getDate()
    this.hour = date.getHours()
    this.minute = date.getMinutes()
    // const surplusMonth = this.surplusMonth(year)
    //初始化range属性中的数据
    this.surplusDay = this.surplusDayArray(this.year, this.month, this.day)
    this.surplusHour = this.surplusHourArray(this.year, this.month, this.day, this.hour)
    this.surplusMinute = this.surplusMinuteArray(this.year, this.month, this.day, this.hour, this.minute)
    this.multiArray = [this.surplusDay, this.surplusHour, this.surplusMinute]
    console.log('this.multiArray', this.multiArray)
  }

到了这里,关于vue小程序,自定义时间选择器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • el-date-picker自定义选择时间&&el-time-select自定义选择时间实现避免时间冲突

    固定十二个月,当月开始时间默认选择月第一天,结束时间默认选择月最后一天; 月份选择只允许选择当前月份 将当月对应的每天按照时间段划分,段数不做限制。 时间段支持任意位置插入(新增)、删除。 每个时间段具有包含属性,同一时刻不允许在两个时间段中出现包

    2024年02月05日
    浏览(35)
  • vue3 setup+Taro3 调用原生小程序自定义年月日时分多列选择器,NutUI改造

    NutUI 有日期时间选择器,但是滑动效果太差,卡顿明显。换成 原生小程序 很顺畅 上代码: 若需要自定义年开始时间,见 initColumn 方法 如作为组件,通过父级传递,可使用:

    2024年02月13日
    浏览(29)
  • Android之自定义时间选择弹框

    随着产品人员不断变态下,总是会要求我们的界面高大上,随意UI能画出来我们就得搞出来才行,这里有自定义弹框,以及时间选择控件的运用,根据年和月判断当月有多少天,需要什么就copy什么。 代码如下(示例): 代码如下(示例): 代码如下(示例): 代码如下(示

    2024年02月10日
    浏览(30)
  • 自定义日历.element-ui 修改时间选择器样式

    目录 一、自定义日历 二、时间选择样式自定义 先上效果图 已经封装成vue组件,可选择切换年月:  因 element-UI的时间选择器 el-date-picker 是将元素直接挂载到页面的 body 中,而非自身元素下,所以使用  /deep/、 、  ::v-deep  等穿透无法定位到元素。 解决方案: 利用时间选择

    2024年02月12日
    浏览(35)
  • vue 封装一个鼠标拖动选择时间段功能

       

    2024年02月15日
    浏览(28)
  • 微信小程序多列选择器实现日期+时间的选择

    2.实现原理   3.实现代码 自定义range数组:

    2024年02月16日
    浏览(35)
  • 小程序项目时间选择器用法

    项目需求是要实现这种形式, 但是相信大家都试了各种插件,都不太合适,uView框架也不能满足自己的需要; 推荐使用:uview-ui-plus  基本上小程序遇到的单选多选 日期 省市区 都可以完美的实现,可以通过插件市场安装使用  但是要实现ui给的原型图 还需要做一下调整 弹性布局给两

    2024年02月09日
    浏览(20)
  • 小程序日期(日历)时间 选择器组件

    封装一个小程序日期(日历)时间 选择器组件 简要说明: 一共两个版本 ,date-time-picker 和 date-time-picker-plus. date-time-picker 弹窗层是 基于 vant-weapp 的 van-popup 组件实现的 date-time-picker-plus 弹窗层是 基于 小程序 自带的 page-container 组件来实现的 * 注意:date-time-picker 需要下载 v

    2024年02月01日
    浏览(38)
  • 使用VUE自定义组件封装部门选择功能

    照惯例,先交待下背景,从真实需求出发,讲述实现效果、设计思路和实现方式。 软件系统中,会有一些常见常用的选择功能,如部门选择、人员选择等,用于填报表单,使用频率很高。直接使用一方面会比较繁琐,另一方面造成代码重复,当需要调整时,则需要遍历整个项

    2024年02月07日
    浏览(23)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包