text: import absFloor from "../utils/abs-floor";
  var abs = Math.abs;
  
  function sign(x) {
      return ((x > 0) - (x < 0)) || +x;
  }
  
  export function toISOString() {
      // for ISO strings we do not use the normal bubbling rules:
      //  * milliseconds bubble up until they become hours
      //  * days do not bubble at all
      //  * months bubble up until they become years
      // This is because there is no context-free conversion between hours and days
      // (think of clock changes)
      // and also not between days and months (28-31 days per month)
      if (!this.isValid()) {
          return this.localeData().invalidDate();
      }
  
      var seconds = abs(this._milliseconds) / 1000;
      var days = abs(this._days);
      var months = abs(this._months);
      var minutes, hours, years;
  
      // 3600 seconds -> 60 minutes -> 1 hour
      minutes = absFloor(seconds / 60);
      hours = absFloor(minutes / 60);
      seconds %= 60;
      minutes %= 60;
  
      // 12 months -> 1 year
      years = absFloor(months / 12);
      months %= 12;
  
      // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
      var Y = years;
      var M = months;
      var D = days;
      var h = hours;
      var m = minutes;
      var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, "") : "";
      var total = this.asSeconds();
  
      if (!total) {
          // this is the same as C#'s (Noda) and python (isodate)...
          // but not other JS (goog.date)
          return "P0D";
      }
  
      var totalSign = total < 0 ? "-" : "";
      var ymSign = sign(this._months) !== sign(total) ? "-" : "";
      var daysSign = sign(this._days) !== sign(total) ? "-" : "";
      var hmsSign = sign(this._milliseconds) !== sign(total) ? "-" : "";
  
      return totalSign +
          "P" +
          (Y ? ymSign + Y + "Y" : "") +
          (M ? ymSign + M + "M" : "") +
          (D ? daysSign + D + "D" : "") +
          ((h || m || s) ? "T" : "") +
          (h ? hmsSign + h + "H" : "") +
          (m ? hmsSign + m + "M" : "") +
          (s ? hmsSign + s + "S" : "");
  }