关于两个时段的日期处理

本文介绍如何利用iview的日期组件创建一个日期选择框,确保选择的结束日期始终大于开始日期。通过监听并处理on-change事件,动态更新选项以限制不可选日期,并在日期变化时同步父组件的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、两个时间段选择,后面的日期要大于前面的日期,使用的是iview组件

日期组件是提前写好的,所以在界面里面引用就好。下面是写好的日期组件

<template>

<div class="date-box">

<DatePicker :type="selfType" placeholder="请选择日期" v-model="selfStartDate" :options="startTimeOption" @on-change="onStartTimeChange" style="height:35px !important;width:auto;" :editable="false"></DatePicker>

<span>-</span>

<DatePicker :type="selfType" v-model="selfEndDate" :options="endTimeOption" @on-change="onEndTimeChange" placeholder="请选择日期" style="height:35px !important;width:auto;" :editable="false"></DatePicker>

</div>

</template>

<script>

export default {

name: 'self-date-picker',

data() {

return {

selfStartDate: this.startDate,

selfEndDate: this.endDate,

selfType: this.type || 'date',

selfFormat: this.format || 'YYYY-MM-DD',

startTimeOption: {},

endTimeOption: {}

}

},

props: {

startDate: String,

endDate: String,

format: String, //type 为datetime时一定要传入format 格式为'YYYY-MM-DD','YYYY-MM-DD HH:mm:ss'

type: String

},

methods: {

//比较日期

onStartTimeChange(startTime) {

this.endTimeOption = {

disabledDate(endTime) {

return endTime < new Date(startTime)

}

}

if (moment(this.selfEndDate).isBefore(this.selfStartDate)) {

this.selfEndDate = this.selfStartDate

}

},

onEndTimeChange(endTime) {

this.startTimeOption = {

disabledDate(startTime) {

return startTime > new Date(endTime)

}

}

if (moment(this.selfEndDate).isBefore(this.selfStartDate)) {

this.selfEndDate = this.selfStartDate

}

}

},

watch: {

selfStartDate: function(newValue, oldValue) {

//每当selfStartDate的值改变则发送事件update:startDate , 并且把值传过去

if (newValue) {

this.$emit('update:startDate', moment(newValue).format(this.selfFormat))

} else {

this.$emit('update:startDate', newValue)

this.startTimeOption = {}

}

},

selfEndDate: function(newValue, oldValue) {

if (newValue) {

this.$emit('update:endDate', moment(newValue).format(this.selfFormat))

} else {

this.$emit('update:endDate', newValue)

this.endTimeOption = {}

}

},

startDate: {

handler(newValue, oldValue) {

this.selfStartDate = newValue

},

deep: true

},

endDate: {

handler(newValue, oldValue) {

this.selfEndDate = newValue

},

deep: true

}

}

}

</script>

<style>

.ivu-input{

height: 35px;

}

.ivu-input-icon-normal+.ivu-input {

padding-right: 14px;

}

</style>

2、界面上的日期引用代码如下:

HTML:

<self-date-picker :startDate.sync="startDate" :endDate.sync="endDate" :format="'YYYY-MM-DD hh:mm:ss'"></self-date-picker>

js:

//引入日期组件

import selfDatepicker from '@/components/selfDatepicker.vue'

export default {

components: {

'self-date-picker': selfDatepicker,

Pagination

},

data() {

return {

startDate: '',

endDate: '',

}}

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值