uniapp+vue3预约时间和日期

picker组件

预约时间和日期,不能选择过去的日期时间

html 复制代码
<view class="whiteBox paddingBottom">
	<view class="title">预约上门时间</view>
	<picker mode="date" :value="nowDate" @change="bindDateChange" fields="day"
		style="border-bottom: 1rpx solid #E7E7E7;" :start="minDate">
		<view class="row">
			<view class="label">日期选择</view>
			<view class="value">{{nowDate ? nowDate : '请选择'}}</view>
		</view>
	</picker>
	<picker mode="time" :value="nowTime" @change="onTime" :start="minTime">
		<view class="row">
			<view class="label">时间选择</view>
			<view class="value">{{nowTime ? nowTime : '请选择'}}</view>
		</view>
	</picker>
</view>
javascript 复制代码
<script setup>
	import {
		ref,
		reactive,
		shallowRef
	} from 'vue'
	import {
		onLoad,
		onShow,
		onReachBottom
	} from '@dcloudio/uni-app'
	import i from '@/libs/common/index.js'
	import api from '@/request/api.js'
	import throttle from '@/libs/function/throttle.js'
	import config from '@/libs/config/index.js'
	import {
		userStore
	} from '@/store/userStore.js'
	import {
		commonStore
	} from '@/store/commonStore.js'
	const user = userStore()
	const common = commonStore()
	
	const nowDate = ref(getDate({
		format: true
	})); // 当前日期
	const nowTime = ref(getTime({
		format: true
	})); // 当前时间
	const minDate = ref(getDate({
		format: true
	})); // 最小可选日期
	const minTime = ref(getTime({
		format: true
	})); // 最小可选时间

	function getTime({
		format
	} = {
		format: false
	}) {
		const date = new Date();
		let hours = date.getHours().toString().padStart(2, '0');
		let minutes = date.getMinutes().toString().padStart(2, '0');
		return format ? `${hours}:${minutes}` : date;
	}

	function getDate({
		format
	} = {
		format: false
	}) {
		const d = new Date();
		const year = d.getFullYear();
		const month = String(d.getMonth() + 1).padStart(2, '0');
		const day = String(d.getDate()).padStart(2, '0');
		return format ? `${year}-${month}-${day}` : d;
	}

	function bindDateChange(e) {
		const selectedDate = new Date(e.detail.value);
		selectedDate.setHours(0, 0, 0, 0); // 将选择的日期设置为当天的开始时间
		const today = new Date();
		today.setHours(0, 0, 0, 0);

		if (selectedDate.getTime() === today.getTime()) {
			// 选择的是今天,设置时间选择器的起始时间为当前时间,并重置当前时间为当前时间
			const currentTime = getTime({
				format: true
			});
			minTime.value = currentTime;
			nowTime.value = currentTime;
		} else {
			// 选择的是未来日期,时间选择器不限制,设置为00:00,并重置当前时间为00:00
			minTime.value = '00:00';
			nowTime.value = '00:00';
		}

		nowDate.value = e.detail.value;
	}

	function onTime(e) {
		const selectedTime = e.detail.value;
		nowTime.value = selectedTime;
	}


</script>
css 复制代码
.whiteBox {
	background: #FFFFFF;
	box-shadow: 0rpx 5rpx 15rpx 10rpx rgba(80, 80, 80, 0.0322);
	border-radius: 16rpx;
	margin: 0 30rpx 30rpx;
	padding-bottom: 40rpx;

	.title {
		padding-top: 30rpx;
		padding-left: 30rpx;
		font-weight: bold;
		font-size: 30rpx;
		color: #3D3D3D;
	}
	.row {
		display: flex;
		justify-content: space-between;
		align-items: center;
		border-bottom: 1rpx solid #E4E4E4;
		margin: 0 30rpx;
		padding: 30rpx 0;

		.label {
			font-size: 28rpx;
			color: #606266;
		}

		.value {
			font-size: 28rpx;
			color: #3D3D3D;
		}
	}

	.row:last-child {
		border: none;
	}
}

.paddingBottom {
	padding-bottom: 0;
}
相关推荐
qq_177767374 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462104 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
wuhen_n4 小时前
JavaScript内存管理与执行上下文
前端·javascript
Hi_kenyon5 小时前
理解vue中的ref
前端·javascript·vue.js
jin1233226 小时前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_920931706 小时前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
橙露7 小时前
React Hooks 深度解析:从基础使用到自定义 Hooks 的封装技巧
javascript·react.js·ecmascript
2501_920931707 小时前
React Native鸿蒙跨平台使用useState管理健康记录和过滤状态,支持多种健康数据类型(血压、体重等)并实现按类型过滤功能
javascript·react native·react.js·ecmascript·harmonyos
Ulyanov7 小时前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发
VT.馒头8 小时前
【力扣】2625. 扁平化嵌套数组
前端·javascript·算法·leetcode·职场和发展·typescript