text: import moment from 'moment';
  
  const defaultDisabledTime = {
    disabledHours() {
      return [];
    },
    disabledMinutes() {
      return [];
    },
    disabledSeconds() {
      return [];
    },
  };
  
  export function getTodayTime(value) {
    const today = moment();
    today.locale(value.locale()).utcOffset(value.utcOffset());
    return today;
  }
  
  export function getTitleString(value) {
    return value.format('LL');
  }
  
  export function getTodayTimeStr(value) {
    const today = getTodayTime(value);
    return getTitleString(today);
  }
  
  export function getMonthName(month) {
    const locale = month.locale();
    const localeData = month.localeData();
    return localeData[locale === 'zh-cn' ? 'months' : 'monthsShort'](month);
  }
  
  export function syncTime(from, to) {
    if (!moment.isMoment(from) || !moment.isMoment(to)) {
      return;
    }
    to.hour(from.hour());
    to.minute(from.minute());
    to.second(from.second());
    to.millisecond(from.millisecond());
  }
  
  export function getTimeConfig(value, disabledTime) {
    let disabledTimeConfig = disabledTime ? disabledTime(value) : {};
    disabledTimeConfig = {
      ...defaultDisabledTime,
      ...disabledTimeConfig,
    };
    return disabledTimeConfig;
  }
  
  export function isTimeValidByConfig(value, disabledTimeConfig) {
    let invalidTime = false;
    if (value) {
      const hour = value.hour();
      const minutes = value.minute();
      const seconds = value.second();
      const disabledHours = disabledTimeConfig.disabledHours();
      if (!disabledHours.includes(hour)) {
        const disabledMinutes = disabledTimeConfig.disabledMinutes(hour);
        if (!disabledMinutes.includes(minutes)) {
          const disabledSeconds = disabledTimeConfig.disabledSeconds(hour, minutes);
          invalidTime = disabledSeconds.includes(seconds);
        } else {
          invalidTime = true;
        }
      } else {
        invalidTime = true;
      }
    }
    return !invalidTime;
  }
  
  export function isTimeValid(value, disabledTime) {
    const disabledTimeConfig = getTimeConfig(value, disabledTime);
    return isTimeValidByConfig(value, disabledTimeConfig);
  }
  
  export function isAllowedDate(value, disabledDate, disabledTime) {
    if (disabledDate) {
      if (disabledDate(value)) {
        return false;
      }
    }
    if (disabledTime) {
      if (!isTimeValid(value, disabledTime)) {
        return false;
      }
    }
    return true;
  }
  
  export function formatDate(value, format) {
    if (!value) {
      return '';
    }
  
    if (Array.isArray(format)) {
      format = format[0];
    }
  
    if (typeof format === 'function') {
      const result = format(value);
      if (typeof result === 'string') {
        return result;
      } else {
        throw new TypeError('The function of format does not return a string');
      }
    }
  
    return value.format(format);
  }
  