| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | /* eslint-disable max-len */import { format, parse } from 'date-fns';import { toNumber } from 'lodash';import { strings } from '../constants';import isNullOrUndefined from '../../utils/isNullOrUndefined';import { zhCN as defaultLocale } from 'date-fns/locale';/** * * @param {string|Date|number} input * @param {string} formatToken * @param {object} dateFnsLocale * @returns {Date} */export const parseToDate = (input: string | Date | number, formatToken = strings.DEFAULT_FORMAT, dateFnsLocale = defaultLocale) => {    if (input instanceof Date) {        return input;    } else if (typeof input === 'number' || !isNaN(Number(input))) {        return new Date(toNumber(input));    } else if (typeof input === 'string') {        let curDate = new Date();        // console.log(input, formatToken);        curDate = parse(input, formatToken, curDate, { locale: dateFnsLocale });        // console.log(curDate, formatToken);        return curDate;    }    return new Date();};/** * * @param {string|Date|number} input * @returns {number} */export const parseToTimestamp = (input: string | Date | number, formatToken = strings.DEFAULT_FORMAT, dateFnsLocale = defaultLocale) => Number(parseToDate(input, formatToken, dateFnsLocale));/** * * @param {Date|number} dateOrTimestamp * @param {string} formatToken * @returns {string} */export const formatToString = (dateOrTimestamp: Date | number, formatToken = strings.DEFAULT_FORMAT, dateFnsLocale = defaultLocale) => format(dateOrTimestamp, formatToken, { locale: dateFnsLocale });export const hourIsDisabled = (disabledHours: () => boolean, hour: number) => {    if (typeof disabledHours === 'function') {        const disabledOptions = disabledHours();        if (            Array.isArray(disabledOptions) &&            !isNullOrUndefined(hour) &&            disabledOptions.some(v => toNumber(v) === toNumber(hour))        ) {            return true;        }    }    return false;};export const minuteIsDisabled = (disabledMinutes: (hour: number) => number[], hour: number, minute: number) => {    if (typeof disabledMinutes === 'function') {        const disabledOptions = disabledMinutes(hour);        if (            Array.isArray(disabledOptions) &&            !isNullOrUndefined(hour) &&            !isNullOrUndefined(minute) &&            disabledOptions.some(v => toNumber(v) === toNumber(minute))        ) {            return true;        }    }    return false;};export const secondIsDisabled = (disabledSeconds: (hour: number, minute: number) => number[], hour: number, minute: number, second: number) => {    if (typeof disabledSeconds === 'function') {        const disabledOptions = disabledSeconds(hour, minute);        if (            Array.isArray(disabledOptions) &&            !isNullOrUndefined(hour) &&            !isNullOrUndefined(minute) &&            !isNullOrUndefined(second) &&            disabledOptions.some(v => toNumber(v) === toNumber(second))        ) {            return true;        }    }    return false;};export const transformToArray = (value: any) => {    if (!Array.isArray(value)) {        return [];    } else {        return [...value];    }};/** * Determine whether the time length is the same as the format * e.g. *  format      | time      | return *  HH:mm       | 12:00     | true *  HH:mm:ss    | 12:00:00  | true *  yyyy HH:mm  | 2021 12:00| true *  HH          | 1         | false *  HH:mm       | 12:0      | false *  HH          | 1         | false *  HH:mm:ss    | 12:00:0   | false * @param {String} time  e.g. 12:0 * @param {String} formatToken e.g. HH:mm * @returns {Boolean} */export const isTimeFormatLike = (time: string, formatToken: string) => {    let isLike = true;    const dateFnsSupportFormatCh = 'BDEGHKLMOPQRSTXYabcehimopqstuwxyz'; // dateFns support format character    const formatSupportChReg = new RegExp(`[${dateFnsSupportFormatCh}]`, 'g');    const formatNotSupportChReg = new RegExp(`[^${dateFnsSupportFormatCh}]`, 'g');    const hmsReg = /[H|m|s]{1,2}/;    const formatSplitted = formatToken.split(formatNotSupportChReg); // => ['HH', 'mm'];    const timeSeparator = formatToken.replace(formatSupportChReg, ''); // => :    const timeReg = new RegExp(`[${timeSeparator}]`, 'g'); // => /[:]/g    const timeSplitted = time.split(timeReg); // => ['12', '0]    if (formatSplitted.length !== timeSplitted.length) {        isLike = false;    } else {        for (let i = 0, len = timeSplitted.length; i < len; i++) {            const formatStr = formatSplitted[i];            const timeStr = timeSplitted[i];            // Returns false if the current character corresponds to minutes and seconds and the length is less than format            // when i=1 => '0'.length < 'mm'.length            if (hmsReg.test(formatStr) && timeStr.length < formatStr.length) {                isLike = false;                break;            }        }    }    return isLike;};
 |