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;
}
相关推荐
灵感__idea2 小时前
Hello 算法:贪心的世界
前端·javascript·算法
河北清兮网络科技5 小时前
短剧 APP 产品说明
小程序·uni-app·短剧
killerbasd5 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
橘子编程6 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
叫我一声阿雷吧6 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰7 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong237 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
天若有情6738 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
M ? A8 小时前
Vue 迁移 React 实战:VuReact 一键自动化转换方案
前端·vue.js·经验分享·react.js·开源·自动化·vureact
yuki_uix8 小时前
重排、重绘与合成——浏览器渲染性能的底层逻辑
前端·javascript·面试