uni-app 自带的picker封装一个日期-时间选择器

首先看下最终效果
在这里插入图片描述

设置数据

import moment from 'moment';
const dateArr = []
for(let i = 0;i<50;i++) { // 默认50天
	const itemDate = moment().add(i,'day');
	const d = itemDate.day();
	let week = '';
	if(d === 0){ week = '日' }
	if(d === 1){ week = '一' }
	if(d === 2){ week = '二' }
	if(d === 3){ week = '三' }
	if(d === 4){ week = '四' }
	if(d === 5){ week = '五' }
	if(d === 6){ week = '六' }
	dateArr.push({
		name:`${itemDate.format('MM月DD日')}${week}`,
		value:itemDate.format('YYYY-MM-DD')
	})
}
const timeHHArr = [];
for(let i = 0;i<24;i++) {
	let str = i<10?`0${i}`:`${i}`
	timeHHArr.push({name:str,value:str})
}

const timeMMArr = [];
for(let i = 0;i<60;i++) {
	let str = i<10?`0${i}`:`${i}`
	timeMMArr.push({name:str,value:str})
}

view

<view class="uni-datetime-picker">
	<picker mode="multiSelector"  
	:value="dateTimeIndex" 
	:range="dateTimeArray" 
	range-key="name" 
	@change="dateTimeChange">
		<view class="uni-input">
			<text>{{moment(travelDate).format('MM月DD日 HH:mm')}}</text>
		</view>
	</picker>
</view>

js

export default{
	data(){
		return{
			travelDate :'',
			moment:moment
		}
	},
	methods:{
		dateTimeChange(e) {
			const d = dateArr[e.detail.value[0]].value
			const h = timeHHArr[e.detail.value[1]].value
			const m = timeMMArr[e.detail.value[2]].value
			this.travelDate = `${d} ${h}:${m}`
		}
	}
}

完整代码

<template>
	<view>
		<picker mode="multiSelector"
		:value="dateTimeIndex" :range="dateTimeArray" range-key="name" @change="dateTimeChange">
				<view class="uni-input">
				<text v-if="travelDate===''" style="color:#bbb">请选择</text>
				<text v-else>{{moment(travelDate).format('MM月DD日 HH:mm')}}</text>
				</view>
		</picker>
	</view>
</template>

<script>
import moment from 'moment';
const dateTimeObj = (() => {
  const dateArr = []
  for(let i = 0;i<50;i++) { // 默认50天
    const itemDate = moment().add(i,'day');
    const d = itemDate.day();
    let week = '';
    if(d === 0){ week = '日' }
    if(d === 1){ week = '一' }
    if(d === 2){ week = '二' }
    if(d === 3){ week = '三' }
    if(d === 4){ week = '四' }
    if(d === 5){ week = '五' }
    if(d === 6){ week = '六' }
    dateArr.push({name:`${itemDate.format('MM月DD日')}${week}`,value:itemDate.format('YYYY-MM-DD')})
  }
  const timeHHArr = [];
  for(let i = 0;i<24;i++) {
    let str = i<10?`0${i}`:`${i}`
    timeHHArr.push({name:str,value:str})
  }

  const timeMMArr = [];
  for(let i = 0;i<60;i++) {
    let str = i<10?`0${i}`:`${i}`
    timeMMArr.push({name:str,value:str})
  }
  return {
    dateArr,
    timeHHArr,
    timeMMArr
  }
})()


export default {
		components: {},
		data() {
			return {
				travelDate:'',
				moment:moment,
				dateTimeArray: [
					dateTimeObj.dateArr,
					dateTimeObj.timeHHArr,
					dateTimeObj.timeMMArr
					],//二维数组,长度是多少是几列
				dateTimeIndex: [0, 0, 0],
			}
		},
		methods: {
			dateTimeChange: function(e) {
				const d = dateTimeObj.dateArr[e.detail.value[0]].value
				const h = dateTimeObj.timeHHArr[e.detail.value[1]].value
				const m = dateTimeObj.timeMMArr[e.detail.value[2]].value
				this.travelDate = `${d} ${h}:${m}`
			}
		}
	}
</script>

<style lang="scss" scoped>
</style>



  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值