text: // flow-typed signature: a56215e90c2cb9a5f9e106edd857208f
  // flow-typed version: 057d3e81b5/moment_v2.3.x/flow_>=v0.34.x
  
  type moment$MomentOptions = {
    y?: number | string,
    year?: number | string,
    years?: number | string,
    M?: number | string,
    month?: number | string,
    months?: number | string,
    d?: number | string,
    day?: number | string,
    days?: number | string,
    date?: number | string,
    h?: number | string,
    hour?: number | string,
    hours?: number | string,
    m?: number | string,
    minute?: number | string,
    minutes?: number | string,
    s?: number | string,
    second?: number | string,
    seconds?: number | string,
    ms?: number | string,
    millisecond?: number | string,
    milliseconds?: number | string
  };
  
  type moment$MomentObject = {
    years: number,
    months: number,
    date: number,
    hours: number,
    minutes: number,
    seconds: number,
    milliseconds: number
  };
  
  type moment$MomentCreationData = {
    input: string,
    format: string,
    locale: Object,
    isUTC: boolean,
    strict: boolean
  };
  
  type moment$CalendarFormat = string | ((moment: moment$Moment) => string);
  
  type moment$CalendarFormats = {
    sameDay?: moment$CalendarFormat,
    nextDay?: moment$CalendarFormat,
    nextWeek?: moment$CalendarFormat,
    lastDay?: moment$CalendarFormat,
    lastWeek?: moment$CalendarFormat,
    sameElse?: moment$CalendarFormat
  };
  
  declare class moment$LocaleData {
    months(moment: moment$Moment): string,
    monthsShort(moment: moment$Moment): string,
    monthsParse(month: string): number,
    weekdays(moment: moment$Moment): string,
    weekdaysShort(moment: moment$Moment): string,
    weekdaysMin(moment: moment$Moment): string,
    weekdaysParse(weekDay: string): number,
    longDateFormat(dateFormat: string): string,
    isPM(date: string): boolean,
    meridiem(hours: number, minutes: number, isLower: boolean): string,
    calendar(
      key:
        | "sameDay"
        | "nextDay"
        | "lastDay"
        | "nextWeek"
        | "prevWeek"
        | "sameElse",
      moment: moment$Moment
    ): string,
    relativeTime(
      number: number,
      withoutSuffix: boolean,
      key: "s" | "m" | "mm" | "h" | "hh" | "d" | "dd" | "M" | "MM" | "y" | "yy",
      isFuture: boolean
    ): string,
    pastFuture(diff: any, relTime: string): string,
    ordinal(number: number): string,
    preparse(str: string): any,
    postformat(str: string): any,
    week(moment: moment$Moment): string,
    invalidDate(): string,
    firstDayOfWeek(): number,
    firstDayOfYear(): number
  }
  declare class moment$MomentDuration {
    humanize(suffix?: boolean): string,
    milliseconds(): number,
    asMilliseconds(): number,
    seconds(): number,
    asSeconds(): number,
    minutes(): number,
    asMinutes(): number,
    hours(): number,
    asHours(): number,
    days(): number,
    asDays(): number,
    months(): number,
    asMonths(): number,
    years(): number,
    asYears(): number,
    add(value: number | moment$MomentDuration | Object, unit?: string): this,
    subtract(value: number | moment$MomentDuration | Object, unit?: string): this,
    as(unit: string): number,
    get(unit: string): number,
    toJSON(): string,
    toISOString(): string,
    isValid(): boolean
  }
  declare class moment$Moment {
    static ISO_8601: string,
    static (
      string?: string,
      format?: string | Array<string>,
      strict?: boolean
    ): moment$Moment,
    static (
      string?: string,
      format?: string | Array<string>,
      locale?: string,
      strict?: boolean
    ): moment$Moment,
    static (
      initDate: ?Object | number | Date | Array<number> | moment$Moment | string
    ): moment$Moment,
    static unix(seconds: number): moment$Moment,
    static utc(): moment$Moment,
    static utc(number: number | Array<number>): moment$Moment,
    static utc(
      str: string,
      str2?: string | Array<string>,
      str3?: string
    ): moment$Moment,
    static utc(moment: moment$Moment): moment$Moment,
    static utc(date: Date): moment$Moment,
    static parseZone(): moment$Moment,
    static parseZone(rawDate: string): moment$Moment,
    static parseZone(
      rawDate: string,
      format: string | Array<string>
    ): moment$Moment,
    static parseZone(
      rawDate: string,
      format: string,
      strict: boolean
    ): moment$Moment,
    static parseZone(
      rawDate: string,
      format: string,
      locale: string,
      strict: boolean
    ): moment$Moment,
    isValid(): boolean,
    invalidAt(): 0 | 1 | 2 | 3 | 4 | 5 | 6,
    creationData(): moment$MomentCreationData,
    millisecond(number: number): this,
    milliseconds(number: number): this,
    millisecond(): number,
    milliseconds(): number,
    second(number: number): this,
    seconds(number: number): this,
    second(): number,
    seconds(): number,
    minute(number: number): this,
    minutes(number: number): this,
    minute(): number,
    minutes(): number,
    hour(number: number): this,
    hours(number: number): this,
    hour(): number,
    hours(): number,
    date(number: number): this,
    dates(number: number): this,
    date(): number,
    dates(): number,
    day(day: number | string): this,
    days(day: number | string): this,
    day(): number,
    days(): number,
    weekday(number: number): this,
    weekday(): number,
    isoWeekday(number: number): this,
    isoWeekday(): number,
    dayOfYear(number: number): this,
    dayOfYear(): number,
    week(number: number): this,
    weeks(number: number): this,
    week(): number,
    weeks(): number,
    isoWeek(number: number): this,
    isoWeeks(number: number): this,
    isoWeek(): number,
    isoWeeks(): number,
    month(number: number): this,
    months(number: number): this,
    month(): number,
    months(): number,
    quarter(number: number): this,
    quarter(): number,
    year(number: number): this,
    years(number: number): this,
    year(): number,
    years(): number,
    weekYear(number: number): this,
    weekYear(): number,
    isoWeekYear(number: number): this,
    isoWeekYear(): number,
    weeksInYear(): number,
    isoWeeksInYear(): number,
    get(string: string): number,
    set(unit: string, value: number): this,
    set(options: { [unit: string]: number }): this,
    static max(...dates: Array<moment$Moment>): moment$Moment,
    static max(dates: Array<moment$Moment>): moment$Moment,
    static min(...dates: Array<moment$Moment>): moment$Moment,
    static min(dates: Array<moment$Moment>): moment$Moment,
    add(
      value: number | moment$MomentDuration | moment$Moment | Object,
      unit?: string
    ): this,
    subtract(
      value: number | moment$MomentDuration | moment$Moment | string | Object,
      unit?: string
    ): this,
    startOf(unit: string): this,
    endOf(unit: string): this,
    local(): this,
    utc(): this,
    utcOffset(
      offset: number | string,
      keepLocalTime?: boolean,
      keepMinutes?: boolean
    ): this,
    utcOffset(): number,
    format(format?: string): string,
    fromNow(removeSuffix?: boolean): string,
    from(
      value: moment$Moment | string | number | Date | Array<number>,
      removePrefix?: boolean
    ): string,
    toNow(removePrefix?: boolean): string,
    to(
      value: moment$Moment | string | number | Date | Array<number>,
      removePrefix?: boolean
    ): string,
    calendar(refTime?: any, formats?: moment$CalendarFormats): string,
    diff(
      date: moment$Moment | string | number | Date | Array<number>,
      format?: string,
      floating?: boolean
    ): number,
    valueOf(): number,
    unix(): number,
    daysInMonth(): number,
    toDate(): Date,
    toArray(): Array<number>,
    toJSON(): string,
    toISOString(): string,
    toObject(): moment$MomentObject,
    isBefore(
      date?: moment$Moment | string | number | Date | Array<number>,
      units?: ?string
    ): boolean,
    isSame(
      date?: moment$Moment | string | number | Date | Array<number>,
      units?: ?string
    ): boolean,
    isAfter(
      date?: moment$Moment | string | number | Date | Array<number>,
      units?: ?string
    ): boolean,
    isSameOrBefore(
      date?: moment$Moment | string | number | Date | Array<number>,
      units?: ?string
    ): boolean,
    isSameOrAfter(
      date?: moment$Moment | string | number | Date | Array<number>,
      units?: ?string
    ): boolean,
    isBetween(
      fromDate: moment$Moment | string | number | Date | Array<number>,
      toDate?: ?moment$Moment | string | number | Date | Array<number>,
      granularity?: ?string,
      inclusion?: ?string
    ): boolean,
    isDST(): boolean,
    isDSTShifted(): boolean,
    isLeapYear(): boolean,
    clone(): moment$Moment,
    static isMoment(obj: any): boolean,
    static isDate(obj: any): boolean,
    static locale(locale: string, localeData?: Object): string,
    static updateLocale(locale: string, localeData?: ?Object): void,
    static locale(locales: Array<string>): string,
    locale(locale: string, customization?: Object | null): moment$Moment,
    locale(): string,
    static months(): Array<string>,
    static monthsShort(): Array<string>,
    static weekdays(): Array<string>,
    static weekdaysShort(): Array<string>,
    static weekdaysMin(): Array<string>,
    static months(): string,
    static monthsShort(): string,
    static weekdays(): string,
    static weekdaysShort(): string,
    static weekdaysMin(): string,
    static localeData(key?: string): moment$LocaleData,
    static duration(
      value: number | Object | string,
      unit?: string
    ): moment$MomentDuration,
    static isDuration(obj: any): boolean,
    static normalizeUnits(unit: string): string,
    static invalid(object: any): moment$Moment
  }
  
  declare module "moment" {
    declare module.exports: Class<moment$Moment>;
  }
  