mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
[improvement] optimize isNaN (#3988)
This commit is contained in:
parent
3299fb6d39
commit
7bcd7e1adc
@ -1,9 +1,10 @@
|
|||||||
import { createNamespace } from '../utils';
|
import { createNamespace } from '../utils';
|
||||||
import { range } from '../utils/format/number';
|
import { range } from '../utils/format/number';
|
||||||
|
import { isDate } from '../utils/validate/date';
|
||||||
import { padZero } from '../utils/format/string';
|
import { padZero } from '../utils/format/string';
|
||||||
import Picker from '../picker';
|
import Picker from '../picker';
|
||||||
import { pickerProps } from '../picker/shared';
|
import { pickerProps } from '../picker/shared';
|
||||||
import { times, isValidDate, getTrueValue, getMonthEndDay } from './utils';
|
import { times, getTrueValue, getMonthEndDay } from './utils';
|
||||||
|
|
||||||
const [createComponent, bem] = createNamespace('datetime-picker');
|
const [createComponent, bem] = createNamespace('datetime-picker');
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
@ -40,12 +41,12 @@ export default createComponent({
|
|||||||
minDate: {
|
minDate: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: () => new Date(currentYear - 10, 0, 1),
|
default: () => new Date(currentYear - 10, 0, 1),
|
||||||
validator: isValidDate
|
validator: isDate
|
||||||
},
|
},
|
||||||
maxDate: {
|
maxDate: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: () => new Date(currentYear + 10, 11, 31),
|
default: () => new Date(currentYear + 10, 11, 31),
|
||||||
validator: isValidDate
|
validator: isDate
|
||||||
},
|
},
|
||||||
maxHour: {
|
maxHour: {
|
||||||
type: Number,
|
type: Number,
|
||||||
@ -66,6 +67,7 @@ export default createComponent({
|
|||||||
watch: {
|
watch: {
|
||||||
value(val) {
|
value(val) {
|
||||||
val = this.correctValue(val);
|
val = this.correctValue(val);
|
||||||
|
|
||||||
const isEqual =
|
const isEqual =
|
||||||
this.type === 'time'
|
this.type === 'time'
|
||||||
? val === this.innerValue
|
? val === this.innerValue
|
||||||
@ -176,7 +178,7 @@ export default createComponent({
|
|||||||
// validate value
|
// validate value
|
||||||
const isDateType = this.type !== 'time';
|
const isDateType = this.type !== 'time';
|
||||||
|
|
||||||
if (isDateType && !isValidDate(value)) {
|
if (isDateType && !isDate(value)) {
|
||||||
value = this.minDate;
|
value = this.minDate;
|
||||||
} else if (!value) {
|
} else if (!value) {
|
||||||
value = `${padZero(this.minHour)}:00`;
|
value = `${padZero(this.minHour)}:00`;
|
||||||
@ -253,8 +255,8 @@ export default createComponent({
|
|||||||
const year = getTrueValue(values[0]);
|
const year = getTrueValue(values[0]);
|
||||||
const month = getTrueValue(values[1]);
|
const month = getTrueValue(values[1]);
|
||||||
const maxDate = getMonthEndDay(year, month);
|
const maxDate = getMonthEndDay(year, month);
|
||||||
let date = getTrueValue(values[2]);
|
|
||||||
|
|
||||||
|
let date = getTrueValue(values[2]);
|
||||||
if (this.type === 'year-month') {
|
if (this.type === 'year-month') {
|
||||||
date = 1;
|
date = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
export function isValidDate(date) {
|
|
||||||
return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
export function times(n, iteratee) {
|
|
||||||
let index = -1;
|
|
||||||
const result = Array(n);
|
|
||||||
|
|
||||||
while (++index < n) {
|
|
||||||
result[index] = iteratee(index);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getTrueValue(formattedValue) {
|
|
||||||
if (!formattedValue) return;
|
|
||||||
while (isNaN(parseInt(formattedValue, 10))) {
|
|
||||||
formattedValue = formattedValue.slice(1);
|
|
||||||
}
|
|
||||||
return parseInt(formattedValue, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getMonthEndDay(year, month) {
|
|
||||||
return 32 - new Date(year, month - 1, 32).getDate();
|
|
||||||
}
|
|
28
src/datetime-picker/utils.ts
Normal file
28
src/datetime-picker/utils.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { isNaN } from '../utils/validate/number';
|
||||||
|
|
||||||
|
export function times(n: number, iteratee: (index: number) => any[]) {
|
||||||
|
let index = -1;
|
||||||
|
const result = Array(n);
|
||||||
|
|
||||||
|
while (++index < n) {
|
||||||
|
result[index] = iteratee(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getTrueValue(value: string | undefined): number | undefined {
|
||||||
|
if (!value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (isNaN(parseInt(value, 10))) {
|
||||||
|
value = value.slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parseInt(value, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getMonthEndDay(year: number, month: number): number {
|
||||||
|
return 32 - new Date(year, month - 1, 32).getDate();
|
||||||
|
}
|
7
src/utils/validate/date.ts
Normal file
7
src/utils/validate/date.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { isNaN } from './number';
|
||||||
|
|
||||||
|
export function isDate(date: Date): boolean {
|
||||||
|
return (
|
||||||
|
Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime())
|
||||||
|
);
|
||||||
|
}
|
@ -1,3 +1,13 @@
|
|||||||
|
/* eslint-disable no-self-compare */
|
||||||
|
|
||||||
export function isNumber(value: string): boolean {
|
export function isNumber(value: string): boolean {
|
||||||
return /^\d+(\.\d+)?$/.test(value);
|
return /^\d+(\.\d+)?$/.test(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isNaN(value: any): boolean {
|
||||||
|
if (Number.isNaN) {
|
||||||
|
return Number.isNaN(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value !== value;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user