日期时间选择器设置选择日期范围
<template>
<el-date-picker
v-model="value"
type="date"
placeholder="选择日期"
:picker-options="pickerOptions"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']" />
</template>
<script>
export default {
data() {
this.pickerOptions = {
disabledDate: time => {
let dateTime = new Date().getTime()
const minTime = dateTime - 24 * 60 * 60 * 1000
const maxTime = new Date(dateTime).setMonth(new Date(dateTime).getMonth() + 1)
return time.getTime() < minTime || time.getTime() > maxTime
},
selectableRange: '00:00:00 - 23:59:59',
}
return {
value: '',
}
},
}
</script>
时间格式化,要求加 00:00:00-23:59:59
<template>
<el-date-picker
v-model="params.date"
class="wd-input"
type="daterange"
align="right"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
:editable="false"
:default-time="['00:00:00', '23:59:59']" />
</template>
<script>
export default {
data() {
return {
params: {
date: null,
},
}
},
}
</script>
限制只能选择 30 / 90 天以内的天数
this.pickerOptions = {
disabledDate: time => {
const dateTime = new Date().getTime()
const calcDay = 30 * 24 * 3600 * 1000
const maxTime = dateTime + calcDay
const minTime = dateTime - 1 * 24 * 3600 * 1000
return time.getTime() < minTime || time.getTime() > maxTime
},
}
this.pickerOptions = {
disabledDate: time => {
let dateTime = new Date().getTime()
const calcDay = 90 * 24 * 3600 * 1000
const maxTime = dateTime + calcDay
const minTime = dateTime - 1 * 24 * 3600 * 1000
return time.getTime() < minTime || time.getTime() > maxTime
},
selectableRange: '00:00:00 - 23:59:59',
}
限制只能选择 30 / 90 天以内的天数
this.pickerOptions = {
disabledDate: time => {
const dateTime = new Date().getTime()
const calcDay = 30 * 24 * 3600 * 1000
const maxTime = dateTime + calcDay
const minTime = dateTime - 1 * 24 * 3600 * 1000
return time.getTime() < minTime || time.getTime() > maxTime
},
}
只能选择今天以前 30 天以内的日期
<template>
<section class="my-recovery_search g-search">
<el-form ref="searchForm" :model="params" label-width="120px" label-position="right">
<sp-search :fold-control="false">
<sp-search-item>
<el-form-item label="客户查询" prop="key">
<el-input v-model="params.key" placeholder="请输入客户名称/资源编号/联系方式"> </el-input>
</el-form-item>
</sp-search-item>
<sp-search-item>
<el-form-item label="回收时间">
<el-date-picker
v-model="params.date"
class="g-input"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
:editable="false"
:default-time="['00:00:00', '23:59:59']"
:picker-options="pickerOptions" />
</el-form-item>
</sp-search-item>
<template #action>
<sp-search-item>
<el-button type="primary" @click="search">查询</el-button>
<el-button @click="resetForm">重置</el-button>
</sp-search-item>
</template>
</sp-search>
</el-form>
</section>
</template>
<script>
import dayjs from 'dayjs'
export default {
data() {
this.times = null
return {
params: {
key: '',
date: '',
},
}
},
computed: {
pickerOptions() {
return {
disabledDate: time => {
const minDate = this.times
const flag = minDate
? time >= dayjs(minDate).add(30, 'day') || time <= dayjs(minDate).subtract(30, 'day')
: false
return flag || time.getTime() > Date.now()
},
onPick: ({ minDate }) => {
this.times = minDate
},
}
},
},
methods: {
search() {
const { date, ...args } = this.params
const params = { ...args }
params.startTime = date && date.length ? date[0] : ''
params.endTime = date && date.length ? date[1] : ''
this.$emit('search', params)
},
resetForm() {
this.$refs.searchForm.resetFields()
this.search()
},
},
}
</script>
限制只能选择 30 天以内的数据包括时分秒
<template>
<el-date-picker
v-model="ruleForm.date1"
type="datetime"
placeholder="仅可设置30天内的任务"
size="small"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm:ss"
popper-class="no-atTheMoment"
:default-value="new Date(Date.now() + 31 * 60 * 1000)"
:picker-options="pickerOptions"
:clearable="false"
:editable="false" />
</template>
<script>
export default {
computed: {
pickerOptions() {
this.pickerOptions = {
disabledDate: time => {
const dateTime = Date.now()
const maxTime = dateTime + 30 * 24 * 3600 * 1000
const minTime = dateTime - 1 * 24 * 3600 * 1000
return time.getTime() < minTime || time.getTime() > maxTime
},
}
},
},
data() {
this.rules = {
date: [
{ required: true, message: '请选择日期', trigger: 'change' },
{ validator: this.validDate, trigger: 'change' },
],
}
return {}
},
methods: {
validDate(rule, value, callback) {
if (value === '') return
const calcTime = new Date(value).getTime()
const dateTime = Date.now()
const minTime = dateTime + 30 * 60 * 1000
const maxTime = dateTime + 30 * 24 * 3600 * 1000
if (calcTime < minTime) {
callback(new Error('请选择当前时间 30 分钟后的时间'))
} else if (calcTime > maxTime) {
callback(new Error('请选择 30 天以内的时间'))
} else {
callback()
}
},
},
}
</script>
限制一个时间段并且只能选择一个月内的数据
<template>
<el-date-picker
v-model="date"
width="260px"
type="daterange"
align="left"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']"
:editable="false"
@change="dateChange">
</el-date-picker>
</template>
<script>
import dayjs from 'dayjs'
export default {
data() {
this.times = null
return {
isLoading: false,
date: null,
params: {
limit: 10,
start: 1,
startTime: '',
endTime: '',
},
}
},
computed: {
pickerOptions() {
return {
disabledDate: time => {
const minDate = this.times
const flag = minDate
? time >= dayjs(minDate).add(30, 'day') || time <= dayjs(minDate).subtract(30, 'day')
: false
if (flag) return flag
const targetTime = time.getTime()
const endDay = new Date(dayjs().format('YYYY-MM-DD') + ' 23:59:59').getTime()
const startDay = new Date(dayjs('2023-07-01').subtract(1, 'd').format('YYYY-MM-DD')).getTime()
return targetTime <= startDay || targetTime > endDay
},
onPick: ({ minDate }) => {
this.times = minDate
},
}
},
},
methods: {
async fetchData(isReset = false) {
isReset && (this.params.start = 1)
},
dateChange(val) {
if (!val) this.times = null
this.params.startTime = val ? val[0] : ''
this.params.endTime = val ? val[1] : ''
this.fetchData(true)
},
},
}
</script>