toISO({
    format = "extended",
    suppressSeconds = false,
    suppressMilliseconds = false,
    includeOffset = true,
    extendedZone = false,
    precision = "milliseconds",
  } = {}) {
    if (!this.isValid) {
      return null;
    }

    precision = normalizeUnit(precision);
    const ext = format === "extended";

    let c = toISODate(this, ext, precision);
    if (orderedUnits.indexOf(precision) >= 3) c += "T";
    c += toISOTime(
      this,
      ext,
      suppressSeconds,
      suppressMilliseconds,
      includeOffset,
      extendedZone,
      precision
    );
    return c;
  }
Returns an ISO 8601-compliant string representation of this DateTime
@param {Object} opts - options
@param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0
@param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0
@param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'
@param {boolean} [opts.extendedZone=false] - add the time zone format extension
@param {string} [opts.format='extended'] - choose between the basic and extended format
@param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.
@example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'
@example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'
@example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'
@example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'
@example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'
@example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'
@return {string|null}