| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 | import { MILLISECONDS_A_DAY, MILLISECONDS_A_HOUR, MILLISECONDS_A_MINUTE, MILLISECONDS_A_SECOND, MILLISECONDS_A_WEEK, REGEX_FORMAT } from '../../constant';var MILLISECONDS_A_YEAR = MILLISECONDS_A_DAY * 365;var MILLISECONDS_A_MONTH = MILLISECONDS_A_DAY * 30;var durationRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;var unitToMS = {  years: MILLISECONDS_A_YEAR,  months: MILLISECONDS_A_MONTH,  days: MILLISECONDS_A_DAY,  hours: MILLISECONDS_A_HOUR,  minutes: MILLISECONDS_A_MINUTE,  seconds: MILLISECONDS_A_SECOND,  milliseconds: 1,  weeks: MILLISECONDS_A_WEEK};var isDuration = function isDuration(d) {  return d instanceof Duration;}; // eslint-disable-line no-use-before-definevar $d;var $u;var wrapper = function wrapper(input, instance, unit) {  return new Duration(input, unit, instance.$l);}; // eslint-disable-line no-use-before-definevar prettyUnit = function prettyUnit(unit) {  return $u.p(unit) + "s";};var isNegative = function isNegative(number) {  return number < 0;};var roundNumber = function roundNumber(number) {  return isNegative(number) ? Math.ceil(number) : Math.floor(number);};var absolute = function absolute(number) {  return Math.abs(number);};var getNumberUnitFormat = function getNumberUnitFormat(number, unit) {  if (!number) {    return {      negative: false,      format: ''    };  }  if (isNegative(number)) {    return {      negative: true,      format: "" + absolute(number) + unit    };  }  return {    negative: false,    format: "" + number + unit  };};var Duration = /*#__PURE__*/function () {  function Duration(input, unit, locale) {    var _this = this;    this.$d = {};    this.$l = locale;    if (input === undefined) {      this.$ms = 0;      this.parseFromMilliseconds();    }    if (unit) {      return wrapper(input * unitToMS[prettyUnit(unit)], this);    }    if (typeof input === 'number') {      this.$ms = input;      this.parseFromMilliseconds();      return this;    }    if (typeof input === 'object') {      Object.keys(input).forEach(function (k) {        _this.$d[prettyUnit(k)] = input[k];      });      this.calMilliseconds();      return this;    }    if (typeof input === 'string') {      var d = input.match(durationRegex);      if (d) {        var properties = d.slice(2);        var numberD = properties.map(function (value) {          return value != null ? Number(value) : 0;        });        this.$d.years = numberD[0];        this.$d.months = numberD[1];        this.$d.weeks = numberD[2];        this.$d.days = numberD[3];        this.$d.hours = numberD[4];        this.$d.minutes = numberD[5];        this.$d.seconds = numberD[6];        this.calMilliseconds();        return this;      }    }    return this;  }  var _proto = Duration.prototype;  _proto.calMilliseconds = function calMilliseconds() {    var _this2 = this;    this.$ms = Object.keys(this.$d).reduce(function (total, unit) {      return total + (_this2.$d[unit] || 0) * unitToMS[unit];    }, 0);  };  _proto.parseFromMilliseconds = function parseFromMilliseconds() {    var $ms = this.$ms;    this.$d.years = roundNumber($ms / MILLISECONDS_A_YEAR);    $ms %= MILLISECONDS_A_YEAR;    this.$d.months = roundNumber($ms / MILLISECONDS_A_MONTH);    $ms %= MILLISECONDS_A_MONTH;    this.$d.days = roundNumber($ms / MILLISECONDS_A_DAY);    $ms %= MILLISECONDS_A_DAY;    this.$d.hours = roundNumber($ms / MILLISECONDS_A_HOUR);    $ms %= MILLISECONDS_A_HOUR;    this.$d.minutes = roundNumber($ms / MILLISECONDS_A_MINUTE);    $ms %= MILLISECONDS_A_MINUTE;    this.$d.seconds = roundNumber($ms / MILLISECONDS_A_SECOND);    $ms %= MILLISECONDS_A_SECOND;    this.$d.milliseconds = $ms;  };  _proto.toISOString = function toISOString() {    var Y = getNumberUnitFormat(this.$d.years, 'Y');    var M = getNumberUnitFormat(this.$d.months, 'M');    var days = +this.$d.days || 0;    if (this.$d.weeks) {      days += this.$d.weeks * 7;    }    var D = getNumberUnitFormat(days, 'D');    var H = getNumberUnitFormat(this.$d.hours, 'H');    var m = getNumberUnitFormat(this.$d.minutes, 'M');    var seconds = this.$d.seconds || 0;    if (this.$d.milliseconds) {      seconds += this.$d.milliseconds / 1000;    }    var S = getNumberUnitFormat(seconds, 'S');    var negativeMode = Y.negative || M.negative || D.negative || H.negative || m.negative || S.negative;    var T = H.format || m.format || S.format ? 'T' : '';    var P = negativeMode ? '-' : '';    var result = P + "P" + Y.format + M.format + D.format + T + H.format + m.format + S.format;    return result === 'P' || result === '-P' ? 'P0D' : result;  };  _proto.toJSON = function toJSON() {    return this.toISOString();  };  _proto.format = function format(formatStr) {    var str = formatStr || 'YYYY-MM-DDTHH:mm:ss';    var matches = {      Y: this.$d.years,      YY: $u.s(this.$d.years, 2, '0'),      YYYY: $u.s(this.$d.years, 4, '0'),      M: this.$d.months,      MM: $u.s(this.$d.months, 2, '0'),      D: this.$d.days,      DD: $u.s(this.$d.days, 2, '0'),      H: this.$d.hours,      HH: $u.s(this.$d.hours, 2, '0'),      m: this.$d.minutes,      mm: $u.s(this.$d.minutes, 2, '0'),      s: this.$d.seconds,      ss: $u.s(this.$d.seconds, 2, '0'),      SSS: $u.s(this.$d.milliseconds, 3, '0')    };    return str.replace(REGEX_FORMAT, function (match, $1) {      return $1 || String(matches[match]);    });  };  _proto.as = function as(unit) {    return this.$ms / unitToMS[prettyUnit(unit)];  };  _proto.get = function get(unit) {    var base = this.$ms;    var pUnit = prettyUnit(unit);    if (pUnit === 'milliseconds') {      base %= 1000;    } else if (pUnit === 'weeks') {      base = roundNumber(base / unitToMS[pUnit]);    } else {      base = this.$d[pUnit];    }    return base === 0 ? 0 : base; // a === 0 will be true on both 0 and -0  };  _proto.add = function add(input, unit, isSubtract) {    var another;    if (unit) {      another = input * unitToMS[prettyUnit(unit)];    } else if (isDuration(input)) {      another = input.$ms;    } else {      another = wrapper(input, this).$ms;    }    return wrapper(this.$ms + another * (isSubtract ? -1 : 1), this);  };  _proto.subtract = function subtract(input, unit) {    return this.add(input, unit, true);  };  _proto.locale = function locale(l) {    var that = this.clone();    that.$l = l;    return that;  };  _proto.clone = function clone() {    return wrapper(this.$ms, this);  };  _proto.humanize = function humanize(withSuffix) {    return $d().add(this.$ms, 'ms').locale(this.$l).fromNow(!withSuffix);  };  _proto.milliseconds = function milliseconds() {    return this.get('milliseconds');  };  _proto.asMilliseconds = function asMilliseconds() {    return this.as('milliseconds');  };  _proto.seconds = function seconds() {    return this.get('seconds');  };  _proto.asSeconds = function asSeconds() {    return this.as('seconds');  };  _proto.minutes = function minutes() {    return this.get('minutes');  };  _proto.asMinutes = function asMinutes() {    return this.as('minutes');  };  _proto.hours = function hours() {    return this.get('hours');  };  _proto.asHours = function asHours() {    return this.as('hours');  };  _proto.days = function days() {    return this.get('days');  };  _proto.asDays = function asDays() {    return this.as('days');  };  _proto.weeks = function weeks() {    return this.get('weeks');  };  _proto.asWeeks = function asWeeks() {    return this.as('weeks');  };  _proto.months = function months() {    return this.get('months');  };  _proto.asMonths = function asMonths() {    return this.as('months');  };  _proto.years = function years() {    return this.get('years');  };  _proto.asYears = function asYears() {    return this.as('years');  };  return Duration;}();export default (function (option, Dayjs, dayjs) {  $d = dayjs;  $u = dayjs().$utils();  dayjs.duration = function (input, unit) {    var $l = dayjs.locale();    return wrapper(input, {      $l: $l    }, unit);  };  dayjs.isDuration = isDuration;  var oldAdd = Dayjs.prototype.add;  var oldSubtract = Dayjs.prototype.subtract;  Dayjs.prototype.add = function (value, unit) {    if (isDuration(value)) value = value.asMilliseconds();    return oldAdd.bind(this)(value, unit);  };  Dayjs.prototype.subtract = function (value, unit) {    if (isDuration(value)) value = value.asMilliseconds();    return oldSubtract.bind(this)(value, unit);  };});
 |