From 31ceba6c38d5bd37c71325507c2c37a790d281cf Mon Sep 17 00:00:00 2001 From: neverland Date: Wed, 18 Sep 2019 14:22:04 +0800 Subject: [PATCH] fix(DatetimePicker): infinite loop when use formatted text is unnumeric (#4485) --- src/datetime-picker/DatePicker.js | 16 ++++++++++------ src/datetime-picker/utils.ts | 6 +++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/datetime-picker/DatePicker.js b/src/datetime-picker/DatePicker.js index 98029abba..603c8edc7 100644 --- a/src/datetime-picker/DatePicker.js +++ b/src/datetime-picker/DatePicker.js @@ -129,14 +129,18 @@ export default createComponent({ }, onChange(picker) { - const values = picker.getValues(); - const year = getTrueValue(values[0]); - const month = getTrueValue(values[1]); + const indexes = picker.getIndexes(); + const getValue = index => getTrueValue(this.originColumns[index].values[indexes[index]]); + + const year = getValue(0); + const month = getValue(1); const maxDate = getMonthEndDay(year, month); - let date = getTrueValue(values[2]); + let date; if (this.type === 'year-month') { date = 1; + } else { + date = getValue(2); } date = date > maxDate ? maxDate : date; @@ -145,8 +149,8 @@ export default createComponent({ let minute = 0; if (this.type === 'datetime') { - hour = getTrueValue(values[3]); - minute = getTrueValue(values[4]); + hour = getValue(3); + minute = getValue(4); } const value = new Date(year, month - 1, date, hour, minute); diff --git a/src/datetime-picker/utils.ts b/src/datetime-picker/utils.ts index 00006820d..bd462f48e 100644 --- a/src/datetime-picker/utils.ts +++ b/src/datetime-picker/utils.ts @@ -17,7 +17,11 @@ export function getTrueValue(value: string | undefined): number | undefined { } while (isNaN(parseInt(value, 10))) { - value = value.slice(1); + if (value.length > 1) { + value = value.slice(1); + } else { + return; + } } return parseInt(value, 10);