uview - DatetimePicker 时间选择器 /时间戳转化

项目场景:

例如:当我们使用 DatetimePicker 组件时,这个官方插件用v-model 不生效想必大家都百度了好久了吧,我也是百度了好久没有出来,最后换了一种思路。希望对你们有帮助。


问题描述

例如:你们在使用的时候是不是也遇到v-model 不生效的问题,data写初始值也不能渲染到页面上,或者说渲染了但是是以时间戳的模式渲染,到这里,你就可以转换思路了,因为这就是官方一直未修复的bug。 接下来我们换一种思路。

	<u-datetime-picker ref="datetimePicker"  v-model="isDate":formatter="formatter" :show="show" mode="year-month" @confirm="confirm" @cancel="close"></u-datetime-picker>

	data() {
		return {
			show: false,
			isDate: '2018-01-01'
		};
	},

解决方案一:

例如:换一种思路:新建一个 input 里面放入v-model,把获得的值放到input里面(下面有代码),之后在美化一下css样式即可完成。直接新建页面,全部复制过去即可。

代码如下:考虑到有的人也会用微信小程序 ,我把微信的方法也写一起了,不用的话自行删除

特别注意:

这个时候千万别再u-datetime-picker 里面加 v-model="xxx" 一加就会变为时间戳。

<template>
	<view class="">
		<view class="sss" @click="show = true">
			<text>日期选择</text>
			<input type="text" v-model="isDate" />
			<u-datetime-picker ref="datetimePicker" :formatter="formatter" :show="show" mode="year-month" @confirm="confirm" @cancel="close"></u-datetime-picker>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			show: false,
			isDate: '2018-01-01'
		};
	},
	onReady() {
		// 微信小程序需要用此写法
		this.$refs.datetimePicker.setFormatter(this.formatter);
	},
	methods: {
		formatter(type, value) {
			if (type === 'year') {
				return `${value}年`;
			}
			if (type === 'month') {
				return `${value}月`;
			}
			if (type === 'day') {
				return `${value}日`;
			}
			return value;
		},
		confirm(e) {
			this.show = false;
			const timeFormat = uni.$u.timeFormat;
			let timeValue = timeFormat(e.value, 'yyyy-mm');
			this.isDate = timeValue;
			console.log(this.isDate);
		},
		close() {
			this.show = false;
		}
	}
};
</script>
<style scoped>
.sss {
	display: flex;
	align-items: center;
	background: pink;
	padding: 20rpx 0;
}
.sss>input{
	margin:  20rpx;
}
</style>


解决方案二:

如果你感觉方法一不够优雅,我还写了第二种方法,async await 处理异步方法。

<template>
	<view class="">
		<view class="sss" @click="show = true">
			<text>日期选择</text>
			<u-datetime-picker :show="show" v-model="timeValue" mode="date" @confirm="confirm" @cancel="close"></u-datetime-picker>
			<view>{{ timeValue }}</view>
		</view>
	</view>
</template>

<script>
export default {
	data() {
		return {
			show: false,
			timeValue: '2022-05-21',
			value1: Number(new Date())
		};
	},
	methods: {
		async confirm(e) {
			this.show = false;
			const timeFormat = uni.$u.timeFormat;
			let timeValue = await timeFormat(e.value, 'yyyy-mm-dd');
			this.timeValue = timeValue;
			console.log(timeValue);
		},
		//自己想要什么样的日期类型,以下作为参考
		// console.log(timeFormat(e.value, 'yyyy-mm-dd'));
		// console.log(timeFormat(e.value, 'yyyy-mm-dd hh:MM'));
		// console.log(timeFormat(e.value, 'yyyy-mm'));
		
		close() {
			this.show = false;
		}
	}
};
</script>
<style scoped>
.sss {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
	background: pink;
}
.sss > view {
	margin-right: 50rpx;
}
</style>



uView DateTimePicker选择器是一个用于选择日期和时间的组件。根据引用[1],uView的2.0版本相比1.0版本可能更好用。关于年份选项的显示,该组件默认是从小到大的顺序显示年份。 根据引用和,在使用uView DateTimePicker选择器时,可能会遇到v-model不生效的问题。一种解决方案是使用ref属性和事件处理函数来实现对选择器的控制。通过设置初始值和自定义formatter函数,可以解决初始值渲染和以时间戳模式渲染的问题。 具体代码实现示例如下: ``` <template> <u-datetime-picker ref="datetimePicker" v-model="selectedDate" :formatter="formatter" :show="show" mode="year-month" @confirm="confirm" @cancel="close"></u-datetime-picker> </template> <script> export default { data() { return { show: false, selectedDate: '2018-01-01' }; }, methods: { formatter(date) { // 自定义日期格式化函数 // 可根据需要返回不同的格式 return date.getFullYear() + '-' + (date.getMonth() + 1); }, confirm(date) { // 点击确认按钮后的事件处理函数 this.selectedDate = date; this.close(); }, close() { // 关闭选择器 this.show = false; } } }; </script> ``` 通过以上实现,你可以在uViewDateTimePicker选择器中选择日期和时间,并解决了v-model不生效的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uView中的DatetimePicker时间选择器年份排序](https://blog.csdn.net/zcc_520/article/details/123702297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [uview - DatetimePicker 时间选择器 /时间戳转化](https://blog.csdn.net/shenle_v/article/details/125909654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值