vue + antd vue + moment 日期选择器,选择范围限制

2024-07-24 23:50:04 浏览数 (2)

代码语言:javascript复制
//main.js
import moment from 'moment';
Vue.prototype.$moment = moment;

案例1:要求日期不可选择未来时间,日期范围不得超过半年

代码语言:html复制
<template>
 	<a-range-picker @change="onChange" @calendarChange="handleCalendarChange" :disabledDate="disabledDate">
 	</a-range-picker>
</template>
<script>
	export default {
		data(){
			return{
				search{
					startDate:'',
					endDate:''
				},
				chooseDate:''
			}
		},
		methods:{
			//日期范围发生变化的回调
			onChange(date,dateString){
				this.search.startDate = dateString[0];
				this.search.endDate= dateString[1];
			},
			//待选日期发生变化的回调(根据选择的日期,来控制不可选,这里仅获取选择的日期)
			handleCalendarChange(value,mode){
				//用moment进行格式转换
				this.chooseDate = this.$moment(value[0]._d).format('YYYY-MM-DD');
			},
			//禁止选择的日期(未来日期不可选,半年之前的不可选)
			disabledDate(current){
				const chooseDate = this.chooseDate;
				return current && current >= this.$moment().endOf('day') || current < this.$moment(new Date(chooseDate)).subtract(6,'months')
			}
		}
	}
</script>

案例2:要求日期默认为最近一周,不可选择未来日期

代码语言:html复制
<template>
  <a-form-item label="内容发布时间">
    <div class="date">
        <a-range-picker
         @change="onChangeDate"
         :default-value="[searchParams.pubStartDate,searchParams.pubEndDate]"
         :disabledDate="disabledDate"
       	></a-range-picker>
     </div>
  </a-form-item>
</template>
<script>
	export default{
		data(){
			searchParams:{
				pubStartDate:null,
				pubEndDate:null
			}
		},
		methods:{
			onChangeDate (date, dateString) {
            	this.searchParams.pubStartDate = dateString[0];
            	this.searchParams.pubEndDate = dateString[1];
        	},
        	 // 禁止选择的日期
        	disabledDate (current) {
            	return current && current >= this.$moment().endOf('day');
        	},
		},
		created(){
			this.searchParams.pubStartDate = this.$moment().subtract('days', 6).format('YYYY-MM-DD');
			this.searchParams.pubEndDate = this.$moment().format('YYYY-MM-DD');
		}
	}
</script>

案例3:两个日期选择器,第一个日期选择器只能选择未来日期(T1),另一个日期选择器只能选择T1及T1之后的日期

代码语言:html复制
<a-date-picker :disabled-date="disabledT1" v-model:value="T1" @change="T1OnChange" />
<a-date-picker :disabled-date="disabledT2" v-model:value="T2" @change="T2OnChange" />

<script>
export default {
	data(){
		return{
			T1:null,
			T2:null,
		}
	},
	methods:{
		T1OnChange(value,dateString){
			this.T1 = dateString;
		},
		T2OnChange(value,dateString){
			this.T2 = dateString;
		},
		disabledT1(current){
			return current && current < this.$moment().endOf('day');
		},
		disabledT2(current){
			return current < proxy.$moment(formData.accept_dead_line);
			 // return proxy.$moment(current).diff(formData.accept_dead_line, 'days')< 1; // 保证选定起始日期后,只能选择某段时间内作为结束日期
		},
	}
}
</script>

return proxy.$moment(current).diff(formData.accept_dead_line, ‘days’)< 1; // 保证选定起始日期后,只能选择某段时间内作为结束日期 这个也可以,不过不能<0,>0,==0,不能以0为临界点,不然会有bug,如果需求是T2大于或小于T1,这种情况下可以用

案例4 :起始日期不得早于2021年12月1日,截止日期不得晚于今天,最长选择1年

代码语言:html复制
<template>
	<a-range-picker v-model:value="rangeDate" :disabled-date="disabledDate" @calendarChange="handleCalendarChange" @openChange="openChange" />
</template>
<script setup lang="ts">
import { ref } from 'vue';
import moment from 'moment';

const chooseDate = ref(''); //根据选择的第一个日期,调整可选的第二个日期范围
const rangeDate = ref([]);
const disabledDate = (current) => {
  return current && current < moment('2021-12-01') || (current > moment().endOf('day') || current < moment(new Date(chooseDate.value)).subtract(1,'years')|| current > moment(new Date(chooseDate.value)).subtract(-1,'years'));
};
//待选日期发生变化的回调(根据选择的日期,来控制不可选,这里仅获取选择的日期)
const handleCalendarChange = (value,mode)=>{
	chooseDate.value = moment(value[0]._d).format('YYYY-MM-DD');
}
// 监听日期面板打开关闭
const openChange = (status)=>{
  if(!status){
    chooseDate.value = '';
  }
}
</script>

0 人点赞