123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- /* eslint-disable max-len */
- import { format, parse } from 'date-fns';
- import { toNumber } from 'lodash-es';
- 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;
- };
|