
<template>
<div>
<span>
<label>選擇時間:</label>
<DatePicker
v-model="dateTimePicker[0]"
type="datetime"
@on-change="startTimeChange"
:options="startTimeOptions"
format="yyyy-MM-dd HH:mm:ss"
placeholder="請選擇開始時間"></DatePicker>
~
<DatePicker
v-model="dateTimePicker[1]"
type="datetime"
@on-change="endTimeChange"
:options="endTimeOptions"
format="yyyy-MM-dd HH:mm:ss"
placeholder="請選擇結束時間"></DatePicker>
</span>
</div>
</template>
<script>
export default {
methods: {
// 重置
reset() {
this.dateTimePicker = ['', ''];
this.startTimeOptions = {
disabledDate: date => {
return ''
}
}
this.endTimeOptions = {
disabledDate: date => {
return ''
}
}
},
startTimeChange: function(e) { //設置開始時間
/*
1.當結束時間為空或小於開始時間時,設置結束時間等於開始時間
2.根據開始時間設置結束時間的disabled日期
結束時間的不可選日期節點:
1) 開始時間為00:00:00時 => 開始時間的00:00:00 - 1,即前一天的23:59:59
2) 開始時間不等於00:00:00時 => 前一天?
*/
if(!e) return false
if(!this.dateTimePicker[1] || new Date(this.dateTimePicker[1]).valueOf() < new Date(e).valueOf()) {
this.dateTimePicker[1] = e;
}
// let startTime = e ? new Date(e).valueOf() - 1 * 24 * 60 * 60 * 1000 : '';
let endDisTime = 0; // 結束時間不可選時間節點
let fristMS = new Date(new Date(e).toLocaleDateString()).valueOf(); // 開始時間的 00:00:00的毫秒數
if(fristMS == new Date(e).valueOf()) { // 開始時間為00:00:00
endDisTime = new Date(new Date(e).toLocaleDateString()).valueOf() - 1;
} else {
endDisTime = e ? new Date(e).valueOf() - 1 * 24 * 60 * 60 * 1000 : '';
}
this.endTimeOptions = {
disabledDate: date => {
return date && (date.valueOf() < endDisTime);
}
}
},
endTimeChange: function(e) { //設置結束時間
let _this = this;
let flag = false;
// console.log(new Date(new Date(this.dateTimePicker[0]).toLocaleDateString()),new Date(new Date(e).toLocaleDateString()))
if(!e || !this.dateTimePicker[0]) return false
let endTime = new Date(e).valueOf();
let startTime = new Date(this.dateTimePicker[0]).valueOf();
if(startTime > endTime) {
this.dateTimePicker[1] = this.dateTimePicker[0]
flag = true
}
// let endTimepre = endTime + 1 * 24 * 60 * 60 * 1000;
let endTimepre = new Date(new Date(e).toLocaleDateString()).valueOf() + 1 * 24 * 60 * 60 * 1000 - 1;
this.startTimeOptions = {
disabledDate(date) {
return date && (flag ? '': date.valueOf() > endTimepre);
// return date.valueOf() < startTime;
}
}
},
}
}
</script>