mirror of
https://github.com/tenrok/vue2-datepicker.git
synced 2026-06-20 06:50:36 +03:00
fix: defaultValue should be used in datetime mode (#384)
When switching date causes time is disabled, the time of `defaultValue` should be used by default.
This commit is contained in:
@@ -118,7 +118,9 @@ export default {
|
||||
props: {
|
||||
value: {},
|
||||
defaultValue: {
|
||||
type: [Date, Number],
|
||||
validator(value) {
|
||||
return !isNaN(new Date(value).getTime());
|
||||
},
|
||||
default() {
|
||||
const date = new Date();
|
||||
date.setHours(0, 0, 0, 0);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import CalendarPanel from '../calendar/calendar-panel';
|
||||
import TimePanel from '../time/time-panel.vue';
|
||||
import { isValidDate } from '../util/date';
|
||||
import { assignTime, getValidDate } from '../util/date';
|
||||
import { pick } from '../util/base';
|
||||
|
||||
export default {
|
||||
@@ -43,14 +43,17 @@ export default {
|
||||
if (type === 'date') {
|
||||
this.openTimePanel();
|
||||
}
|
||||
const time = isValidDate(this.value) ? this.value : new Date(this.defaultValue);
|
||||
const datetime = new Date(date);
|
||||
datetime.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
|
||||
let datetime = assignTime(date, getValidDate(this.value, this.defaultValue));
|
||||
if (this.disabledTime(new Date(datetime))) {
|
||||
this.currentValue = date;
|
||||
} else {
|
||||
this.emitDate(datetime, type);
|
||||
// set the time of defalutValue;
|
||||
datetime = assignTime(date, this.defaultValue);
|
||||
if (this.disabledTime(new Date(datetime))) {
|
||||
// if disabled don't emit date
|
||||
this.currentValue = datetime;
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.emitDate(datetime, type);
|
||||
},
|
||||
},
|
||||
render() {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import CalendarRange from '../calendar/calendar-range';
|
||||
import TimeRange from '../time/time-range';
|
||||
import { pick } from '../util/base';
|
||||
import { isValidRangeDate } from '../util/date';
|
||||
import { isValidRangeDate, assignTime } from '../util/date';
|
||||
|
||||
export default {
|
||||
name: 'DatetimeRange',
|
||||
@@ -43,20 +43,21 @@ export default {
|
||||
if (type === 'date') {
|
||||
this.openTimePanel();
|
||||
}
|
||||
let datetimes = dates.map((v, i) => {
|
||||
const datetime = new Date(v);
|
||||
const time = isValidRangeDate(this.value) ? this.value[i] : new Date(this.defaultValue);
|
||||
datetime.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
|
||||
return datetime;
|
||||
let datetimes = dates.map((date, i) => {
|
||||
const time = isValidRangeDate(this.value) ? this.value[i] : this.defaultValue;
|
||||
return assignTime(date, time);
|
||||
});
|
||||
if (datetimes[1].getTime() < datetimes[0].getTime()) {
|
||||
datetimes = [datetimes[0], datetimes[0]];
|
||||
}
|
||||
if (datetimes.some(this.disabledTime)) {
|
||||
this.currentValue = dates;
|
||||
} else {
|
||||
this.emitDate(datetimes, type);
|
||||
datetimes = dates.map(date => assignTime(date, this.defaultValue));
|
||||
if (datetimes.some(this.disabledTime)) {
|
||||
this.currentValue = datetimes;
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.emitDate(datetimes, type);
|
||||
},
|
||||
},
|
||||
render() {
|
||||
|
||||
@@ -45,7 +45,9 @@ export default {
|
||||
props: {
|
||||
value: {},
|
||||
defaultValue: {
|
||||
type: [Date, Number],
|
||||
validator(value) {
|
||||
return !isNaN(new Date(value).getTime());
|
||||
},
|
||||
default() {
|
||||
const date = new Date();
|
||||
date.setHours(0, 0, 0, 0);
|
||||
@@ -134,7 +136,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
isDisabled(date) {
|
||||
return this.disabledTime(new Date(date), this.innerValue);
|
||||
return this.disabledTime(new Date(date));
|
||||
},
|
||||
handleSelect(value, type) {
|
||||
const date = new Date(value);
|
||||
|
||||
@@ -49,13 +49,10 @@ export default {
|
||||
this.emitChange(type, 1);
|
||||
},
|
||||
disabledStartTime(date) {
|
||||
return this.disabledTime(date, [this.startValue, this.endValue], 0);
|
||||
return this.disabledTime(date, 0);
|
||||
},
|
||||
disabledEndTime(date) {
|
||||
return (
|
||||
date.getTime() < this.startValue.getTime() ||
|
||||
this.disabledTime(date, [this.startValue, this.endValue], 1)
|
||||
);
|
||||
return date.getTime() < this.startValue.getTime() || this.disabledTime(date, 1);
|
||||
},
|
||||
},
|
||||
render() {
|
||||
|
||||
@@ -19,3 +19,10 @@ export function getValidDate(value, ...backup) {
|
||||
const date = new Date(value);
|
||||
return isValidDate(date) ? date : getValidDate(...backup);
|
||||
}
|
||||
|
||||
export function assignTime(target, source) {
|
||||
const date = new Date(target);
|
||||
const time = new Date(source);
|
||||
date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());
|
||||
return date;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user