text: /*eslint-disable*/
  // 把 YYYY-MM-DD 改成了 yyyy-MM-dd
  ;(function (main) {
    'use strict'
  
    /**
     * Parse or format dates
     * @class fecha
     */
    var fecha = {}
    var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g
    var twoDigits = /\d\d?/
    var threeDigits = /\d{3}/
    var fourDigits = /\d{4}/
    var word = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i
    var noop = function () {}
  
    function shorten(arr, sLen) {
      var newArr = []
      for (var i = 0, len = arr.length; i < len; i++) {
        newArr.push(arr[i].substr(0, sLen))
      }
      return newArr
    }
  
    function monthUpdate(arrName) {
      return function (d, v, i18n) {
        var index = i18n[arrName].indexOf(
          v.charAt(0).toUpperCase() + v.substr(1).toLowerCase()
        )
        if (~index) {
          d.month = index
        }
      }
    }
  
    function pad(val, len) {
      val = String(val)
      len = len || 2
      while (val.length < len) {
        val = '0' + val
      }
      return val
    }
  
    var dayNames = [
      'Sunday',
      'Monday',
      'Tuesday',
      'Wednesday',
      'Thursday',
      'Friday',
      'Saturday',
    ]
    var monthNames = [
      'January',
      'February',
      'March',
      'April',
      'May',
      'June',
      'July',
      'August',
      'September',
      'October',
      'November',
      'December',
    ]
    var monthNamesShort = shorten(monthNames, 3)
    var dayNamesShort = shorten(dayNames, 3)
    fecha.i18n = {
      dayNamesShort: dayNamesShort,
      dayNames: dayNames,
      monthNamesShort: monthNamesShort,
      monthNames: monthNames,
      amPm: ['am', 'pm'],
      DoFn: function DoFn(D) {
        return (
          D +
          ['th', 'st', 'nd', 'rd'][
            D % 10 > 3 ? 0 : ((D - (D % 10) !== 10) * D) % 10
          ]
        )
      },
    }
  
    var formatFlags = {
      D: function (dateObj) {
        return dateObj.getDay()
      },
      DD: function (dateObj) {
        return pad(dateObj.getDay())
      },
      Do: function (dateObj, i18n) {
        return i18n.DoFn(dateObj.getDate())
      },
      d: function (dateObj) {
        return dateObj.getDate()
      },
      dd: function (dateObj) {
        return pad(dateObj.getDate())
      },
      ddd: function (dateObj, i18n) {
        return i18n.dayNamesShort[dateObj.getDay()]
      },
      dddd: function (dateObj, i18n) {
        return i18n.dayNames[dateObj.getDay()]
      },
      M: function (dateObj) {
        return dateObj.getMonth() + 1
      },
      MM: function (dateObj) {
        return pad(dateObj.getMonth() + 1)
      },
      MMM: function (dateObj, i18n) {
        return i18n.monthNamesShort[dateObj.getMonth()]
      },
      MMMM: function (dateObj, i18n) {
        return i18n.monthNames[dateObj.getMonth()]
      },
      yy: function (dateObj) {
        return String(dateObj.getFullYear()).substr(2)
      },
      yyyy: function (dateObj) {
        return dateObj.getFullYear()
      },
      h: function (dateObj) {
        return dateObj.getHours() % 12 || 12
      },
      hh: function (dateObj) {
        return pad(dateObj.getHours() % 12 || 12)
      },
      H: function (dateObj) {
        return dateObj.getHours()
      },
      HH: function (dateObj) {
        return pad(dateObj.getHours())
      },
      m: function (dateObj) {
        return dateObj.getMinutes()
      },
      mm: function (dateObj) {
        return pad(dateObj.getMinutes())
      },
      s: function (dateObj) {
        return dateObj.getSeconds()
      },
      ss: function (dateObj) {
        return pad(dateObj.getSeconds())
      },
      S: function (dateObj) {
        return Math.round(dateObj.getMilliseconds() / 100)
      },
      SS: function (dateObj) {
        return pad(Math.round(dateObj.getMilliseconds() / 10), 2)
      },
      SSS: function (dateObj) {
        return pad(dateObj.getMilliseconds(), 3)
      },
      a: function (dateObj, i18n) {
        return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1]
      },
      A: function (dateObj, i18n) {
        return dateObj.getHours() < 12
          ? i18n.amPm[0].toUpperCase()
          : i18n.amPm[1].toUpperCase()
      },
      ZZ: function (dateObj) {
        var o = dateObj.getTimezoneOffset()
        return (
          (o > 0 ? '-' : '+') +
          pad(Math.floor(Math.abs(o) / 60) * 100 + (Math.abs(o) % 60), 4)
        )
      },
    }
  
    var parseFlags = {
      d: [
        twoDigits,
        function (d, v) {
          d.day = v
        },
      ],
      M: [
        twoDigits,
        function (d, v) {
          d.month = v - 1
        },
      ],
      yy: [
        twoDigits,
        function (d, v) {
          var da = new Date(),
            cent = +('' + da.getFullYear()).substr(0, 2)
          d.year = '' + (v > 68 ? cent - 1 : cent) + v
        },
      ],
      h: [
        twoDigits,
        function (d, v) {
          d.hour = v
        },
      ],
      m: [
        twoDigits,
        function (d, v) {
          d.minute = v
        },
      ],
      s: [
        twoDigits,
        function (d, v) {
          d.second = v
        },
      ],
      yyyy: [
        fourDigits,
        function (d, v) {
          d.year = v
        },
      ],
      S: [
        /\d/,
        function (d, v) {
          d.millisecond = v * 100
        },
      ],
      SS: [
        /\d{2}/,
        function (d, v) {
          d.millisecond = v * 10
        },
      ],
      SSS: [
        threeDigits,
        function (d, v) {
          d.millisecond = v
        },
      ],
      D: [twoDigits, noop],
      ddd: [word, noop],
      MMM: [word, monthUpdate('monthNamesShort')],
      MMMM: [word, monthUpdate('monthNames')],
      a: [
        word,
        function (d, v, i18n) {
          var val = v.toLowerCase()
          if (val === i18n.amPm[0]) {
            d.isPm = false
          } else if (val === i18n.amPm[1]) {
            d.isPm = true
          }
        },
      ],
      ZZ: [
        /[\+\-]\d\d:?\d\d/,
        function (d, v) {
          var parts = (v + '').match(/([\+\-]|\d\d)/gi),
            minutes
  
          if (parts) {
            minutes = +(parts[1] * 60) + parseInt(parts[2], 10)
            d.timezoneOffset = parts[0] === '+' ? minutes : -minutes
          }
        },
      ],
    }
    parseFlags.DD = parseFlags.DD
    parseFlags.dddd = parseFlags.ddd
    parseFlags.Do = parseFlags.dd = parseFlags.d
    parseFlags.mm = parseFlags.m
    parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h
    parseFlags.MM = parseFlags.M
    parseFlags.ss = parseFlags.s
    parseFlags.A = parseFlags.a
  
    // Some common format strings
    fecha.masks = {
      default: 'ddd MMM dd yyyy HH:mm:ss',
      shortDate: 'M/D/yy',
      mediumDate: 'MMM d, yyyy',
      longDate: 'MMMM d, yyyy',
      fullDate: 'dddd, MMMM d, yyyy',
      shortTime: 'HH:mm',
      mediumTime: 'HH:mm:ss',
      longTime: 'HH:mm:ss.SSS',
    }
  
    /***
     * Format a date
     * @method format
     * @param {Date|number} dateObj
     * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'
     */
    fecha.format = function (dateObj, mask, i18nSettings) {
      var i18n = i18nSettings || fecha.i18n
  
      if (typeof dateObj === 'number') {
        dateObj = new Date(dateObj)
      }
  
      if (
        Object.prototype.toString.call(dateObj) !== '[object Date]' ||
        isNaN(dateObj.getTime())
      ) {
        throw new Error('Invalid Date in fecha.format')
      }
  
      mask = fecha.masks[mask] || mask || fecha.masks['default']
  
      return mask.replace(token, function ($0) {
        return $0 in formatFlags
          ? formatFlags[$0](dateObj, i18n)
          : $0.slice(1, $0.length - 1)
      })
    }
  
    /**
     * Parse a date string into an object, changes - into /
     * @method parse
     * @param {string} dateStr Date string
     * @param {string} format Date parse format
     * @returns {Date|boolean}
     */
    fecha.parse = function (dateStr, format, i18nSettings) {
      var i18n = i18nSettings || fecha.i18n
  
      if (typeof format !== 'string') {
        throw new Error('Invalid format in fecha.parse')
      }
  
      format = fecha.masks[format] || format
  
      // Avoid regular expression denial of service, fail early for really long strings
      // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
      if (dateStr.length > 1000) {
        return false
      }
  
      var isValid = true
      var dateInfo = {}
      format.replace(token, function ($0) {
        if (parseFlags[$0]) {
          var info = parseFlags[$0]
          var index = dateStr.search(info[0])
          if (!~index) {
            isValid = false
          } else {
            dateStr.replace(info[0], function (result) {
              info[1](dateInfo, result, i18n)
              dateStr = dateStr.substr(index + result.length)
              return result
            })
          }
        }
  
        return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1)
      })
  
      if (!isValid) {
        return false
      }
  
      var today = new Date()
      if (
        dateInfo.isPm === true &&
        dateInfo.hour != null &&
        +dateInfo.hour !== 12
      ) {
        dateInfo.hour = +dateInfo.hour + 12
      } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {
        dateInfo.hour = 0
      }
  
      var date
      if (dateInfo.timezoneOffset != null) {
        dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset
        date = new Date(
          Date.UTC(
            dateInfo.year || today.getFullYear(),
            dateInfo.month || 0,
            dateInfo.day || 1,
            dateInfo.hour || 0,
            dateInfo.minute || 0,
            dateInfo.second || 0,
            dateInfo.millisecond || 0
          )
        )
      } else {
        date = new Date(
          dateInfo.year || today.getFullYear(),
          dateInfo.month || 0,
          dateInfo.day || 1,
          dateInfo.hour || 0,
          dateInfo.minute || 0,
          dateInfo.second || 0,
          dateInfo.millisecond || 0
        )
      }
      return date
    }
  
    /* istanbul ignore next */
    if (typeof module !== 'undefined' && module.exports) {
      module.exports = fecha
    } else if (typeof define === 'function' && define.amd) {
      define(function () {
        return fecha
      })
    } else {
      main.fecha = fecha
    }
  })(this)
  