RelativeDateTimeFormat = function(
    opt_numeric, opt_style, opt_relativeDateTimeSymbols) {
  /**
   * Records if the implementation is ECMAScript
   * @private @type {boolean}
   */
  this.nativeMode_ = false;

  if (!LocaleFeature.USE_ECMASCRIPT_I18N_RDTF) {
    asserts.assert(
        opt_relativeDateTimeSymbols ||
            relativeDateTimeSymbols.getRelativeDateTimeSymbols(),
        'goog.i18n.RelativeDateTimeSymbols requires symbols ECMAScript mode');
    /**
     * RelativeDateTimeSymbols object for locale data required by the formatter.
     * @private @const {?relativeDateTimeSymbols.RelativeDateTimeSymbols}
     */
    this.rdtfSymbols_ = !LocaleFeature.USE_ECMASCRIPT_I18N_RDTF ?
        (opt_relativeDateTimeSymbols ||
         relativeDateTimeSymbols.getRelativeDateTimeSymbols()) :
        null;
  }
  if (!this.rdtfSymbols_) {
    this.nativeMode_ = true;
  }

  /**
   * Flag to force numeric mode in all cases. Normally true.
   * @private @type {boolean}
   */
  this.alwaysNumeric_ = true;
  if (opt_numeric) {
    asserts.assert(
        opt_numeric == RelativeDateTimeFormat.NumericOption.ALWAYS ||
            opt_numeric == RelativeDateTimeFormat.NumericOption.AUTO,
        'Invalid opt_numeric value');
    if (opt_numeric == RelativeDateTimeFormat.NumericOption.ALWAYS) {
      this.alwaysNumeric_ = true;
    } else if (opt_numeric == RelativeDateTimeFormat.NumericOption.AUTO) {
      this.alwaysNumeric_ = false;
    }
  }

  /** @private @type {!RelativeDateTimeFormat.Style} */
  this.style_ = RelativeDateTimeFormat.Style.LONG;
  if (opt_style) {
    asserts.assert(
        opt_style >= RelativeDateTimeFormat.Style.LONG &&
            opt_style <= RelativeDateTimeFormat.Style.NARROW,
        'Style must be LONG, SHORT, or NARROW');
    this.style_ = opt_style;
  }
}
@constructor
@param {!RelativeDateTimeFormat.NumericOption=} opt_numeric
    This optional string determines if formatted output is always
    the numeric formatting rather than available relative strings.
    ALWAYS (default) forces numeric results in all uses of this instance.
    AUTO mode uses available relative strings such as "tomorrow", falling
back to numeric.
@param {!RelativeDateTimeFormat.Style=} opt_style
    This optional value determines the style of the relative time output.
    Values include LONG, SHORT, NARROW. Default is LONG.
    as part of the resulting formatted string
@param {!relativeDateTimeSymbols.RelativeDateTimeSymbols=}
    opt_relativeDateTimeSymbols This optional value can be used to set the
    data for to use for this instance rather than obtaining from
    relativedatetimesymbols.
@final