picker年月日时分秒时间选择器组件(新增插槽初始化,年月日时分秒与时分秒可配置)

1.组件页面wepy的

<style lang="scss">
.text{
  font-size: 14px;
}
</style>
<template>
  <picker class="picker-mbx" mode="multiSelector" value="{{dateTime}}" bindchange="changeDateTime" bindcolumnchange="changeDateTimeColumn" range="{{dateTimeArray}}">
    <view class="text">
      <div v-if="selected">{{strTime}}</div>
      <div v-else><slot></slot></div>
    </view>
  </picker>
</template>
<script>
  import wepy from '@wepy/core'
  const moment = require('moment')
  import { dateTimePicker, getMonthDay, getNewDateArryByStr, withData } from '../common/time'
  const cutTimeStr = (str) => {
    const _str = str.substring(0, str.length - 1)
    return withData(_str)
  }
  wepy.component({
    props: {
      // 年月日 时分秒
      mode: {
        default: 'date'
      },
      // 暂时使用slot
      label: {
        default: '请选择时间'
      },
      // 现有值,需要时规范的时间格式
      val: {
        type: String
      }

    },
    watch: {
      strTime: {
        deep: true,
        handler(val) {
          console.log(val)
          if (val && this.selected) {
            this.$emit('uptime', val)
          }
        }
      }
    },
    computed: {
      strTime() {
        try {
          let dateTimeArray = this.dateTimeArray, dateTime = this.dateTime
          //新增 时分秒
          if (this.mode==='time') {
            return cutTimeStr(dateTimeArray[0][dateTime[0]]) + ':' + cutTimeStr(dateTimeArray[1][dateTime[1]]) + ':' + cutTimeStr(dateTimeArray[2][dateTime[2]])
          } else {
            return cutTimeStr(dateTimeArray[0][dateTime[0]]) + '-' + cutTimeStr(dateTimeArray[1][dateTime[1]]) + '-' + cutTimeStr(dateTimeArray[2][dateTime[2]]) + ' ' + cutTimeStr(dateTimeArray[3][dateTime[3]]) + ':' + cutTimeStr(dateTimeArray[4][dateTime[4]]) + ':' + cutTimeStr(dateTimeArray[5][dateTime[5]])
          }
        } catch (e) {
          return ''
        }
      }
    },
    data: {
      selected: false,
      dateTimeArray: [],
      dateTime: [0, 0, 0, 0, 0, 0]
    },
    ready() {
      const _str = this.val
      let hasDate = false
      if (_str) {
        hasDate = getNewDateArryByStr(new Date(_str))
      }
      let {dateTimeArray, dateTime} = dateTimePicker('', '', hasDate)
      if (this.mode==='time') {
        dateTimeArray = dateTimeArray.slice(-3)
        dateTime = dateTime.slice(-3)
        console.log(this.mode,dateTimeArray)
      }
      this.dateTimeArray = dateTimeArray
      this.dateTime = dateTime
    },
    methods: {
      changeDateTime(e) {
        const val = e.$wx.detail.value
        console.log(val)
        this.dateTime = val
        this.selected = true
      },
      changeDateTimeColumn(e) {
        console.log(e,'ss')
        const val = e.$wx.detail.value
        let arr = this.dateTime
        let dateArr = this.dateTimeArray
        arr[e.$wx.detail.column] = val
        if(this.mode!=='time'){
          dateArr[2] = getMonthDay(dateArr[0][arr[0]], dateArr[1][arr[1]])
        }
        this.dateTimeArray = dateArr
        this.dateTime = arr
      }
    }
  })
</script>
<config>
  {
    "usingComponents": {
      "icon": "~@/components/icon"
    }
  }
</config>



2.依赖的js文件


function withData(param) {
  return param < 10 ? '0' + param : '' + param
}
function getLoopArray(start, end, unit = '') {
  var _start = start || 0
  var _end = end || 1
  var array = []
  for (var i = _start; i <= _end; i++) {
    array.push(withData(i + unit))
  }
  return array
}
function getMonthDay(year, month) {
  let flag = year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)
  let array = null
  switch (month) {
    case '01':
    case '03':
    case '05':
    case '07':
    case '08':
    case '10':
    case '12':
    case '1月':
    case '3月':
    case '5月':
    case '7月':
    case '8月':
    case '10月':
    case '12月':
      array = getLoopArray(1, 31, '日')
      break
    case '04':
    case '06':
    case '09':
    case '11':
    case '4月':
    case '6月':
    case '9月':
    case '11月':
      array = getLoopArray(1, 30, '日')
      break
    case '02':
    case '2月':
      array = flag ? getLoopArray(1, 29, '日') : getLoopArray(1, 28, '日')
      break
    default:
      array = '月份格式不正确,请重新输入!'
  }
  return array
}
function getNewDateArry() {
  // 当前时间的处理
  var newDate = new Date()
  const year = withData(newDate.getFullYear()),
    mont = withData(newDate.getMonth() + 1),
    date = withData(newDate.getDate()),
    hour = withData(newDate.getHours()),
    minu = withData(newDate.getMinutes())
  // seco = withData(newDate.getSeconds());

  return [year, mont, date, hour, minu]
}

/**
 * 多了单位
 * @returns {string[]}
 */
function getNewDateArryByStr() {
  // 当前时间的处理
  var newDate = new Date()
  var year = newDate.getFullYear() + '年',
    mont = (newDate.getMonth() + 1) + '月',
    date = newDate.getDate() + '日',
    hour = newDate.getHours() + '时',
    minu = newDate.getMinutes() + '分',
    seco = newDate.getSeconds() + '秒'

  return [year, mont, date, hour, minu,seco]
}
const cutTimeStr = (str) => str.substring(0, str.length - 1)
function dateTimePicker(startYear, endYear, date) {
  // 返回默认显示的数组和联动数组的声明
  var dateTime = [], dateTimeArray = [[], [], [], [], []]
  var start = startYear || new Date().getFullYear()
  var end = endYear || 2100
  // 默认开始显示数据
  var defaultDate = date ? [...date.split(' ')[0].split('-'), ...date.split(' ')[1].split(':')] : getNewDateArryByStr()

  // 处理联动列表数据
  /* 年月日 时分秒 */
  dateTimeArray[0] = getLoopArray(start, end, '年')
  dateTimeArray[1] = getLoopArray(1, 12, '月')
  const tempTime = getNewDateArry()
  dateTimeArray[2] = getMonthDay(tempTime[0], tempTime[1])
  dateTimeArray[3] = getLoopArray(0, 23, '时')
  dateTimeArray[4] = getLoopArray(0, 59, '分')
  dateTimeArray[5] = getLoopArray(0, 59, '秒')

  dateTimeArray.forEach((current, index) => {
    const idx = current.indexOf(defaultDate[index]) ? current.indexOf(defaultDate[index]) : 0
    dateTime.push(idx)
  })

  return {
    dateTimeArray: dateTimeArray,
    dateTime: dateTime
  }
}
module.exports = {
  dateTimePicker: dateTimePicker,
  getMonthDay: getMonthDay,
  getNewDateArry: getNewDateArry
}

3.使用moment.js
网址http://momentjs.cn/ 安装npm依赖包
4.使用 引入组件

 <time @uptime="upEndTime" :val="end_time">
          <span class="fz-14" v-if="end_time">{{end_time}}</span>
          <span class="fz-14 c9" v-else>请选择结束时间</span>
  </time>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木贝西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值